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

Regex 用于检查捕获组之间的子字的正则表达式,regex,python-3.x,Regex,Python 3.x,谈到正则表达式,我面临的问题是替换合成词开头部分的连字符 例如: wo-wo-wo-wo-wo-wo-wo-wo-wo-wo-wonder->wonder 嗨->嗨 wo-wo->wo f-f-f-fight 因此,对于文本中的每个单词,我想替换在主词(wonder)之前部分或全部重复主词(wowo,但也wonder)的单词。 同时,像双线性或 不能替换经过预训练的,因为在这种情况下,连字符(pre)不是主词(train)的一部分 我见过这个解决方案,显然它是一个很好的解决方案。 但我的问题完

谈到正则表达式,我面临的问题是替换合成词开头部分的连字符

例如:

wo-wo-wo-wo-wo-wo-wo-wo-wo-wo-wonder->wonder
嗨->嗨
wo-wo->wo
f-f-f-fight

因此,对于文本中的每个单词,我想替换在主词(
wonder
)之前部分或全部重复主词(
wowo
,但也
wonder
)的单词。 同时,像
双线性

不能替换经过预训练的
,因为在这种情况下,连字符(pre)不是主词(train)的一部分

我见过这个解决方案,显然它是一个很好的解决方案。 但我的问题完全不同,因为我不想对连字符的长度施加限制,同时我想检查连字符是否是主单词的一部分

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

re.sub(r'(?<!\S)(\w{1,3})(?:-\1)*-(\w+)(?!\S)', '\\2', s)
re.sub(r'(?使用

详细信息

  • (?-空白边界(如果使用
    \b
    ,则为单词边界)
  • (\w+)
    -第1组:任何一个或多个单词字符
  • (?:-\1)*
    -0次或多次重复
    -
    和组1值
  • -
    -连字符
  • (\1)
    -组2:与组1中的值相同
Python示例
re.sub

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

s=re.sub(r')(?如果您不想触摸,例如
预先培训的
尝试。
r'\b(\w+)(?:-\1)*-(\1)'
s = re.sub(r'(?<!\S)(\w+)(?:-\1)*-(\1)', r'\2', s)