在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)
我做错了什么?
答案 0 :(得分:2)
您可以匹配重复的连续单词字符并跳过它们,然后使用类似
的解决方案处理所有其他重复的连续字符x <- "Hi hi missing u lollol hahahahalol sillybilly haaaaa!"
gsub("(\\w)\\1+(*SKIP)(*F)|(\\w+?)\\2+", "\\2", x, perl=TRUE)
详细:
(\\w)\\1+(*SKIP)(*F)
- 匹配并捕获一个单词char(带(\\w)
,这可以调整)然后1+次出现这个相同的char(带\\1+
)然后全文被丢弃并且引擎在比赛结束后继续搜索另一场比赛(使用PCRE (*SKIP)(*FAIL)
verbs序列)|
- 或(\\w+?)\\2+
- 将尽可能少的1个或多个字符字符捕获到第2组(使用(\\w+?)
),然后匹配1个以上的相同值(使用{{1} })。替换只是第2组的值。