我有一个问题是如何替换某个位置的字符。例如:
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/