You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则替换连续重复词结果不符 如何正确实现重复单词去重

原有代码问题说明

你写的正则r'(\w* ){2,}'逻辑存在本质错误:

  • 该规则只会匹配连续2次及以上的「任意单词字符+空格」组合,完全没有校验前后单词是否重复
  • 正则默认贪婪匹配,会直接吞掉测试文本里从开头到第一个"good "的所有内容("ram is a good "共4组带空格的词),而捕获组在重复匹配时只会保留最后一次匹配到的内容即"good ",替换后自然会丢失前面所有正常文本,输出不符合预期。
正确实现方法

要实现连续重复单词去重,核心是通过反向引用匹配和前一个单词完全相同的后续重复内容,同时加上单词边界避免误匹配,参考实现如下:

import re
# 正则规则说明:
# \b 匹配单词边界,避免匹配单词内部片段
# (\w+) 捕获组1,匹配单个完整单词
# (?:\W+\1\b)+ 非捕获组,匹配1次及以上「分隔符+和捕获组1完全相同的单词」,覆盖连续2次及以上的重复场景
# 可选参数re.IGNORECASE:如果需要处理大小写不一致的重复(如Good good)可以加上,不需要就去掉
typosRegex = re.compile(r'\b(\w+)(?:\W+\1\b)+', re.IGNORECASE)
mo2 = typosRegex.sub(r'\1', 'ram is a good good personalities.')
print(mo2)

运行上述代码会输出预期结果ram is a good personalities.。

如果你的文本里存在带撇号的缩写单词(比如don't、it's),可以把正则里的\w+替换为[a-zA-Z']+,根据实际文本场景微调字符匹配范围即可。

内容的提问来源于stack exchange,提问作者Farhan Reza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:15:36