使用正则表达式 (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 不正确,但我想知道如何显示我想用我刚刚检测到的字母替换它 (c 或 s 在这种情况下)。提前谢谢你。
以 "ces" 和 "ses" 结尾的字符串遵循相同的模式,即“*es$”
如果我理解正确的话,你不需要两个模式。
示例:
x = c("ces", "ses", "mes)
gsub( pattern = "*([cs])es$", replacement = "\1", x)
[1] "c" "s" "mes"
希望对您有所帮助。
男
要删除 词末尾的 es
,即前面有 s
或 c
,您可以使用
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
:匹配 s
或 c
的 capturing group #1,然后是 es
匹配,然后 \b
确保下一个字符不是字母、数字或 _
。替换中的 </code> 是对存储在捕获组 #1 内存缓冲区中的值的反向引用。</p>
<p>在使用 PCRE 正则表达式的第二个示例中(由于 <code>perl=TRUE
),使用 (?<=[sc])
positive lookbehind 而不是 ([sc])
捕获组。 Lookbehinds 不消耗文本,它们匹配的文本不会落在匹配值中,因此无论如何都不需要恢复它。替换为空字符串。
我有一个字符串向量,我想同时从所有以 -ses 或 -ces 结尾的字符串(单词)中删除 -es。我想同时而不是必然地这样做的原因是有时会发生这样的情况,即在删除一个词尾后,另一个词尾会出现,而我不想将这种模式应用于一个单词两次。 我不知道如何同时使用两种模式,但这是我能做的最好的:
text <- gsub("[sc]+s$", "[sc]", text)
我知道 replacement 不正确,但我想知道如何显示我想用我刚刚检测到的字母替换它 (c 或 s 在这种情况下)。提前谢谢你。
以 "ces" 和 "ses" 结尾的字符串遵循相同的模式,即“*es$”
如果我理解正确的话,你不需要两个模式。
示例:
x = c("ces", "ses", "mes)
gsub( pattern = "*([cs])es$", replacement = "\1", x)
[1] "c" "s" "mes"
希望对您有所帮助。
男
要删除 词末尾的 es
,即前面有 s
或 c
,您可以使用
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
:匹配 s
或 c
的 capturing group #1,然后是 es
匹配,然后 \b
确保下一个字符不是字母、数字或 _
。替换中的 </code> 是对存储在捕获组 #1 内存缓冲区中的值的反向引用。</p>
<p>在使用 PCRE 正则表达式的第二个示例中(由于 <code>perl=TRUE
),使用 (?<=[sc])
positive lookbehind 而不是 ([sc])
捕获组。 Lookbehinds 不消耗文本,它们匹配的文本不会落在匹配值中,因此无论如何都不需要恢复它。替换为空字符串。