我有一个问题是如何替换某个位置的字符。例如:

str <- c("abcdccc","hijklccc","abcuioccc")
#I want to replace character "c" which is in position 3 to "X" how can I do that?
#I know the function gsub and substr, but the only idea I have got so far is
#use if() to make it. How can I do it quickly?
#ideal result
>str
"abXdccc" "hijklccc" "abXuioccc"

最佳答案

我想知道您是否可以在这里使用正则表达式前瞻来获取所需内容。

str <- c("abcdccc","hijklccc","abcuioccc")
gsub("(^.{2})(?=c)(.*$)", "\\1X\\2", str, perl = T)

或使用最新邮件建议的正向后视
sub("(?<=^.{2})c", "X", str, perl = TRUE)

这是在寻找匹配字母c的字符,该字符位于字符串开头的任何两个字符之后。 c替换为X
(?<=是积极回望的开始
^.{2}表示从字符串开头开始的任何两个字符
)c是最后一个部分,它说两个字符后必须是c
[1] "abXcdccc"   "hijklccc"   "abXcuioccc"

如果您想了解有关正则表达式正在使用的更多信息(link)

此外,还有一个通用功能:
switch_letter <- function(x, letter, position, replacement) {
  stopifnot(position > 1)

  pattern <- paste0("(?<=^.{", position - 1, "})", letter)

  sub(pattern, replacement, x, perl = TRUE)

}

switch_letter(str, "c", 3, "X")

关于r - 如何替换字符串中特定位置的特定字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50963557/

10-12 17:23
查看更多