我有一个R字符向量:
a<-'aabbccaabbccaabbcc'
我想用'bb'替换最后一次'aa'和后面的任何内容。
我尝试使用stri_replace_last
stringi
个套件使用正则表达式(.*)aa(.*)
。但它取代了所有内容,因为它只是一个字符串。
在R中有没有办法做到这一点?
答案 0 :(得分:3)
a <- 'aabbccaabbccaabbcc'
first <- gsub('^(.*)aa.*$', '\\1', a)
result <- paste0(first, paste(replicate(nchar(a) - nchar(first), "b"), collapse = ""))
> a
[1] "aabbccaabbccaabbcc"
> result
[1] "aabbccaabbccbbbbbb"
^^ anything which follows the last 'aa' has been replaced with 'b'
答案 1 :(得分:0)
我们可以使用gsubfn
来匹配两个&#39; a&#39;然后是零个或多个不是&#39; a&#39; ([^a]*
)直到字符串的结尾($
),通过复制&#39; b&#39;来替换匹配的字符串。通过匹配字符串的字符数。
library(gsubfn)
gsubfn("aa[^a]*$", ~strrep("b", nchar(x)), a)
#[1] "aabbccaabbccbbbbbb"