更改特定字母后的所有匹配项
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"
它将所有未紧跟字母 o
的 e
替换为 a
。
或
> gsub("^.*o(*SKIP)(*F)|e", "a", x, perl=TRUE)
[1] "keonala" "keontala"
^.*?o
匹配从开始到最后o
的所有字符。 (*SKIP)(*F)
使匹配失败,现在 OR 运算符旁边的模式将尝试匹配剩余字符串中的字符。所以模式 e
将匹配所有 e
之后的 o
。将 e
替换为 a
将为您提供所需的输出。
在字符串中,如何将 '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"
它将所有未紧跟字母 o
的 e
替换为 a
。
或
> gsub("^.*o(*SKIP)(*F)|e", "a", x, perl=TRUE)
[1] "keonala" "keontala"
^.*?o
匹配从开始到最后o
的所有字符。 (*SKIP)(*F)
使匹配失败,现在 OR 运算符旁边的模式将尝试匹配剩余字符串中的字符。所以模式 e
将匹配所有 e
之后的 o
。将 e
替换为 a
将为您提供所需的输出。