如何替换角色中的最后一个匹配项?

时间:2017-02-21 04:36:34

标签: r regex

我有一个R字符向量:

a<-'aabbccaabbccaabbcc'

我想用'bb'替换最后一次'aa'和后面的任何内容。 我尝试使用stri_replace_last stringi个套件使用正则表达式(.*)aa(.*)。但它取代了所有内容,因为它只是一个字符串。

在R中有没有办法做到这一点?

2 个答案:

答案 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"
相关问题