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

using regular expressions (regex) to make replace multiple patterns at the same time in R

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

text <- gsub("[sc]+s$", "[sc]", text)

我知道 replacement 不正确,但我想知道如何显示我想用我刚刚检测到的字母替换它 (cs 在这种情况下)。提前谢谢你。

以 "ces" 和 "ses" 结尾的字符串遵循相同的模式,即“*es$”

如果我理解正确的话,你不需要两个模式。

示例: x = c("ces", "ses", "mes)

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

[1] "c" "s" "mes"

希望对您有所帮助。

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

gsub("([sc])es\b", "\1", text)
gsub("(?<=[sc])es\b", "", text, perl=TRUE)

要在 字符串 的末尾删除它们,您可以继续使用您的 $ 锚点:

gsub("([sc])es$", "\1", text)
gsub("(?<=[sc])es$", "", text, perl=TRUE)

第一个 gsub TRE 模式是 ([sc])es\b:匹配 sccapturing group #1,然后是 es 匹配,然后 \b 确保下一个字符不是字母、数字或 _。替换中的 </code> 是对存储在捕获组 #1 内存缓冲区中的值的反向引用。</p> <p>在使用 PCRE 正则表达式的第二个示例中(由于 <code>perl=TRUE),使用 (?<=[sc]) positive lookbehind 而不是 ([sc]) 捕获组。 Lookbehinds 不消耗文本,它们匹配的文本不会落在匹配值中,因此无论如何都不需要恢复它。替换为空字符串。