用于检查捕获组之间子词的正则表达式

时间:2019-06-05 09:21:01

标签: regex python-3.x

关于正则表达式,我面临着替换组合词开头的连字符的问题。

例如:

wo-wo-wo-wonder -> wonder hi-hi-hi-hi -> hi wo-wo-wo -> wo f-f-f-fight

因此,对于文本中的每个单词,我想替换在主要单词(wonder之前具有部分或全部重复的主要单词(wo-wo-wo以及{{1 }})。  同时,不得替换诸如wonder-wonder-wonderbi-linear之类的组合词,因为在这种情况下,连字符(pre)不属于主要词(train)的一部分。

我已经看到了此解决方案[Python find all occurrences of hyphenated word and replace at position],显然,它可以是一个很好的解决方案。 但是我的问题完全不同,因为我不想对连字符的长度施加限制,同时我想检查连字符是否是主词的一部分。

这是我实际使用的正则表达式,但是如前所述,它不能解决我的全部问题。


pre-trained

1 个答案:

答案 0 :(得分:2)

使用

r'(?<!\S)(\w+)(?:-\1)*-(\1)'

r'\b(\w+)(?:-\1)*-(\1)'

请参见regex demo

详细信息

  • (?<!\S)-空格边界(如果使用\b,则是单词边界)
  • (\w+)-第1组:任何一个或多个单词字符
  • (?:-\1)*--和第1组值的重复次数为0或更多
  • --连字符
  • (\1)-第2组:与第1组相同的值。

Python示例re.sub

s = re.sub(r'(?<!\S)(\w+)(?:-\1)*-(\1)', r'\2', s)