更改特定字母后的所有实例

时间:2015-03-28 02:09:13

标签: regex r perl replace

在字符串中,如何更改任何' e?这是一个' o的权利。到了'?

我第一次尝试这个,但只做了一次改变:

x <- c('keonele','keontele');
gsub('o.*\\Ke','a',x,perl=T);
[1] "keonela"  "keontela"

然后,我通过相同的命令两次运行输入,得到了正确的结果:

x <- c('keonele','keontele');
x <- gsub('o.*\\Ke','a',x,perl=T);
x <- gsub('o.*\\Ke','a',x,perl=T);
[1] "keonala"  "keontala"

如何使用一个命令详尽地进行此类更改?

1 个答案:

答案 0 :(得分:3)

您需要使用否定前瞻

> x <- c('keonele','keontele')
> gsub("e(?!o)", "a", x, perl=TRUE)
[1] "keonala"  "keontala"

它替换了e后面没有紧跟o字母a的所有> gsub("^.*o(*SKIP)(*F)|e", "a", x, perl=TRUE) [1] "keonala" "keontala"

^.*?o

o匹配从开始到最后(*SKIP)(*F)的所有字符。 e使匹配失败,现在OR运算符旁边的模式将尝试匹配剩余字符串中的字符。因此,模式e将与之后o之后的所有e匹配。用a替换{{1}}将为您提供所需的输出。