使用R在字符串中查找重复的模式

Jav*_*ier 5 regex string r

我有一个包含表达式的大文本:"aaaahahahahaha that was a good joke". 处理后,我希望它"aaaaahahahaha"消失,或者至少将其改为简单"ha".

目前,我正在使用这个:

gsub('(.+?)\\1', '', str)
Run Code Online (Sandbox Code Playgroud)

当带有模式的字符串位于句子的开头,而不是位于其他任何位置的位置时,此方法有效.所以:

str <- "aaaahahahahaha that was a good joke"
gsub('(.+?)\\1', '', str)
#[1] "ha that was a good joke"`
Run Code Online (Sandbox Code Playgroud)

 str <- "that was aaaahahahahaha a good joke"
 gsub('(.+?)\\1', '', str)
#[1] "that was aaaahahahahaha a good joke"
Run Code Online (Sandbox Code Playgroud)

这个问题可能与此有关:在python中找到重复的模式,但我找不到R中的等价.

我假设是非常简单的,也许我错过了一些微不足道的东西,但由于正则表达不是我的力量,我已经尝试了一些没有用的东西,我想知道是否有人可以帮助我.问题是:如何在R中的字符串中查找和替换重复的模式?

在此先感谢您的时间.

vks*_*vks 6

\b(\S+?)\1\S*\b
Run Code Online (Sandbox Code Playgroud)

使用此.参见演示.

https://regex101.com/r/sJ9gM7/46

对于r使用\\b(\\S+?)\\1\\S*\\bperl=TRUE选项.

  • 这是天才。你能解释一下其中的逻辑吗?一个简单的解析器仍然没有阐明到我可以弄清楚规则的程度。 (2认同)
  • @TylerRinker`\b`是单词边界...所以`\ b\S*\b`将检测到假定特殊字符不存在的单词.....现在`(\ S +?)\ 1`将检测重复的字符串......然后`\ S*`将捕获剩下的...... (2认同)