使用正则表达式(regex)在R中同时替换多个模式

使用正则表达式(regex)在R中同时替换多个模式,r,regex,gsub,R,Regex,Gsub,我有一个字符串向量,我想同时从所有以-ses或-ces结尾的字符串(单词)中删除-es。我想同时做,而不是同时做的原因是,有时在删除一个结尾后,会出现另一个结尾,而我不想将此模式应用于一个单词两次。 我不知道如何同时使用两种模式,但这是我所能做到的最好的: text <- gsub("[sc]+s$", "[sc]", text) text以“ces”和“ses”结尾的字符串遵循相同的模式,即“*es$” 如果我理解正确,你不需要两种模式 例如: x=c(“ces”、“ses”、“mes

我有一个字符串向量,我想同时从所有以-ses或-ces结尾的字符串(单词)中删除-es。我想同时做,而不是同时做的原因是,有时在删除一个结尾后,会出现另一个结尾,而我不想将此模式应用于一个单词两次。 我不知道如何同时使用两种模式,但这是我所能做到的最好的:

text <- gsub("[sc]+s$", "[sc]", text)
text以“ces”和“ses”结尾的字符串遵循相同的模式,即“*es$”

如果我理解正确,你不需要两种模式

例如:
x=c(“ces”、“ses”、“mes)

gsub(pattern=“*([cs])es$”,replacement=“\\1”,x)

[1] “c”“s”“mes”

希望能有帮助


M

要删除单词末尾的
es
,即前面有
s
c
,您可以使用

gsub("([sc])es\\b", "\\1", text)
gsub("(?<=[sc])es\\b", "", text, perl=TRUE)
第一个
gsub
TRE模式是
([sc])es\b
:a#1匹配
s
c
,然后匹配
es
,然后
\b
确保下一个字符不是字母、数字或
。替换中的
\1
是对存储在捕获组1内存缓冲区中的值的反向引用


在第二个使用PCRE正则表达式的示例中(由于
perl=TRUE
),
(?感谢您的回答。我想排除任何其他可能性,例如-mes。
gsub("([sc])es$", "\\1", text)
gsub("(?<=[sc])es$", "", text, perl=TRUE)