更改特定字母后的所有匹配项

Change all occurrences after particular letter

在字符串中,如何将 'o' 右侧的任何 'e' 更改为 'a'?

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

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"

如何使用一条命令彻底完成此类更改?

你需要使用负前瞻

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

它将所有未紧跟字母 oe 替换为 a

> gsub("^.*o(*SKIP)(*F)|e", "a", x, perl=TRUE)
[1] "keonala"  "keontala"

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