正则表达式:删除连续重复字符至少2次,以及删除R中字符串中其后的字符

正则表达式:删除连续重复字符至少2次,以及删除R中字符串中其后的字符,r,regex,R,Regex,我有一个不同字符串的向量,如下所示: s <- c("mir123mm8", "qwe98wwww98", "123m3tqppppw23!") > c("mir123", "qwe98", "123m3tq") [1] "mir123" "qwe98" "123m3tq" 我想得到这样的答案: s <- c("mir123mm8", "qwe98wwww98", "123m3tqppppw23!") > c("mir123", "qwe98", "123m3

我有一个不同字符串的向量,如下所示:

s <- c("mir123mm8", "qwe98wwww98", "123m3tqppppw23!")
> c("mir123", "qwe98", "123m3tq")
[1] "mir123"  "qwe98"   "123m3tq"
我想得到这样的答案:

s <- c("mir123mm8", "qwe98wwww98", "123m3tqppppw23!")
> c("mir123", "qwe98", "123m3tq")
[1] "mir123"  "qwe98"   "123m3tq"
这意味着,如果一个字符串至少有2个连续的重复字符,则应删除它们及其后的字符


在R中使用正则表达式的更好方法是什么?

您可以在模式中使用反向引用来匹配重复的字符:

sub("(.*?)(.)\\2.*", "\\1", s)
# [1] "mir123"  "qwe98"   "123m3tq"

当第二个捕获的组(单个字符)直接在后面重复时,模式匹配。让第一个捕获组解除冻结?因此,每当模式匹配时,都会返回第一个捕获的组。

您可以在模式中使用back引用来匹配重复的字符:

sub("(.*?)(.)\\2.*", "\\1", s)
# [1] "mir123"  "qwe98"   "123m3tq"

当第二个捕获的组(单个字符)直接在后面重复时,模式匹配。让第一个捕获组解除冻结?因此,只要模式匹配,就会返回第一个捕获的组。

谢谢@Psidom。非常有用。谢谢@Psidom。这很有帮助。