使用正则表达式替换重复的字符组

时间:2017-05-05 18:08:53

标签: r regex string gsub

在R中,我有一个字符串,其中包含重复的字符组:

testString <- "Hi hi missing u lollol hahahahalol sillybilly haaaaa!"

我尝试使用gsub正则表达式替换每个单词中重复的字符组以产生以下输出:

"Hi hi missing u lol halol sillybilly haaaaa!"

我已经尝试了以下一行,但它没有产生正确的输出:

gsub("[[:blank:]](.+?){2,}[[blank]]\\1",
replacement="\\1", testString, perl=TRUE)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以匹配重复的连续单词字符并跳过它们,然后使用类似

的解决方案处理所有其他重复的连续字符
x <- "Hi hi missing u lollol hahahahalol sillybilly haaaaa!"
gsub("(\\w)\\1+(*SKIP)(*F)|(\\w+?)\\2+", "\\2", x, perl=TRUE)

请参阅regex demoonline R demo

详细

  • (\\w)\\1+(*SKIP)(*F) - 匹配并捕获一个单词char(带(\\w),这可以调整)然后1+次出现这个相同的char(带\\1+)然后全文被丢弃并且引擎在比赛结束后继续搜索另一场比赛(使用PCRE (*SKIP)(*FAIL) verbs序列)
  • | - 或
  • (\\w+?)\\2+ - 将尽可能少的1个或多个字符字符捕获到第2组(使用(\\w+?)),然后匹配1个以上的相同值(使用{{1} })。

替换只是第2组的值。