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)