关于正则表达式,我面临着替换组合词开头的连字符的问题。
例如:
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-wonder
或bi-linear
之类的组合词,因为在这种情况下,连字符(pre)不属于主要词(train)的一部分。
我已经看到了此解决方案[Python find all occurrences of hyphenated word and replace at position],显然,它可以是一个很好的解决方案。 但是我的问题完全不同,因为我不想对连字符的长度施加限制,同时我想检查连字符是否是主词的一部分。
这是我实际使用的正则表达式,但是如前所述,它不能解决我的全部问题。
pre-trained
答案 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)