(已解析)Regex用于选择(替换)单行中任何字符串的第三个和更多重复项

oxosxuxt  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(136)

Regex是为文本到语音转换程序设计的,该程序需要处理包含延伸单词或可发音的场景中断的作品,如AAAAAAAAARRRRRGGHHH!!!!或XXXXXXXXXXXXXXXXXX,虽然阅读不是问题,但文本到语音转换程序在放弃发音后会读出每个字母。
文本到语音有一个支持正则表达式的发音调整,因为简单的查找和替换是不够的。
正则表达式需要找到重复3次或更多次的字符串,但实际上只选择(并因此替换)第三个或更多个这样的示例。
https://regex101.com/r/Z6zVOg/2我管理得最好的是这个(?|(?'a'.*)\k'a'(\1))\1我有很多采样线,每一个都应该匹配下面的行,但是似乎只有一部分工作,

The quick brown fox jumps over the lazy lazy lazy dog.
The quick brown fox jumps over the lazy lazy dog.
Attack Attack Attack Attack Attack Attack
Attack Attack 
Attack!!!!!!
Attack!!
WAAAAAAGGGGGGHHHHHH!!!
WAAGGHH!!
Attack Whatever Attack Attack
Attack Whatever Attack Attack

The quick brown fox jumps over the lazy lazy lazy dog.
The quick brown fox jumps over the lazy lazy dog.
Attack Attack
Attack Attack 
Attack!!
Attack!!
WAAGGHH!!!
WAAGGHH!!
Attack Whatever Attack Attack
Attack Whatever Attack Attack
This This This Friend Friend Friend
This This Friend Friend

编辑:虽然给出的两个解决方案确实能在Regex 101中工作,但它们似乎不能在@voice中工作,因此我目前正试图弄清楚它使用的是regex的哪一个变体。

  • regex101.com/r/zM2qfC/1?- jhnc只删除所有匹配的文本。
  • variant:regex101.com/r/HJ1jmN/1- jhnc错误消息,索引16附近的反斜杠转义序列无法识别。

解决方案- jhnc(.+?)\1(\1)+ $1$2只需要添加替换,这是我以前没有注意到的。

8ehkhllq

8ehkhllq1#

模式:(.)\1{2,}
替换:$1
例如,这将取代:* WAAAAAAGGGGGGHHHHH!!!* 与 WAGH!!! -表示同一字符在一个字符中出现三次或三次以上。
要仅使用一个单词来抑制重复3次或更多次的单词:
模式:(\B(\w+)\W*)\1{2,}\2*
替换:$1

相关问题