s<-"HsdKjnsjsHLKsmH"
如何在R中的特定位置替换字符
将字符串s
中的仅第二个“ H”替换为“ Q”
答案 0 :(得分:4)
我们可以使用gregexpr
和substr
。 gregexpr
查找所有匹配项并返回匹配项的位置。使用第二个匹配项的位置,然后可以使用substr
将第二个“ H”替换为“ Q”。这样可以保证它始终是我们要替换的第二个“ H”:
s = "HsdKjnsjsHLKsmH"
pos <- gregexpr("H", s)[[1]][2]
substr(s, pos, pos) <- "Q"
# [1] "HsdKjnsjsQLKsmH"
使用stringr
并将其设为:
library(stringr)
str_pos_replace <- function(string, pattern, replacement, pos=1){
str_locate_all(string, pattern)[[1]][pos,, drop=FALSE] %>%
`str_sub<-`(string, ., value = replacement)
}
str_pos_replace(s, "H", "QQQ", 2)
# [1] "HsdKjnsjsQQQLKsmH"
答案 1 :(得分:2)
s = "HsdKjnsjsHLKsmH"
sub("[^H]*H[^H]*\\KH","Q",s,perl=T)
#[1] "HsdKjnsjsQLKsmH"
答案 2 :(得分:1)
尝试以下方法。
s <- "HsdKjnsjsHLKsmH"
sub("(H[^H]*)H", "\\1Q", s)
如果要概括上面的代码,请使用以下函数。
replaceSecond <- function(s, old, new){
pattern <- paste0("(", old, "[^", old, "]*)", old)
new <- paste0("\\1", new)
sub(pattern, new, s)
}
replaceSecond(s, "H", "Q")
#[1] "HsdKjnsjsQLKsmH"