正则检测重复单词分三类:一是连续重复如“hello hello”,用\b(\w+)\s+\1\b;二是全文任意重复,用\b(\w+)\b(?=.*\b\1\b)配合去重;三是推荐词频统计法,更鲁棒清晰。

直接用正则检测重复单词,关键不在“找所有词”,而在“识别某词是否再次出现”。核心思路是:捕获一个词,再确认它在后续文本中还有相同完整出现。不同场景对应不同写法,下面分三类讲清楚。
检测连续重复的单词(如“hello hello”)
这是最常见也最容易写的场景,适合清理打字错误或格式不规范的文本。
- 正则模式:
\b(\w+)\s+\1\b -
\b确保匹配完整单词,避免把 “test” 当成 “contest” 的一部分 -
(\w+)捕获第一个单词(比如 “the”) -
\s+匹配中间的一个或多个空白(空格、制表符等) -
\1回溯引用,要求后面紧跟着一模一样的词
Python 示例:
import re text = "The the quick brown fox fox jumps" matches = re.findall(r'\b(\w+)\s+\1\b', text, re.IGNORECASE) # 返回 ['the', 'fox']
检测全文中任意位置重复出现的单词(如“apple ... apple”)
这种不强调相邻,只要一个词在整个字符串里出现 ≥2 次就算重复。适合做初步词频筛查。
- 正则模式:
\b(\w+)\b(?=.*\b\1\b) -
(?=...)是正向先行断言,表示“后面某处还得有这个单词” - 注意:该模式会为每个重复词的每次出现都匹配一次,所以结果会有重复项,需去重
C# 或 Python 中可配合 set 去重:
words = list(set(re.findall(r'\b(\w+)\b(?=.*\b\1\b)', text, re.IGNORECASE)))
只提取真正重复(≥2次)且去重后的词列表
如果目标是干净输出“哪些词重复了”,推荐绕开复杂正则,用词频统计更稳、更易读:
- 先用
r'\b\w+\b'提取所有单词(转小写可忽略大小写) - 用
collections.Counter统计频次 - 筛选出 count > 1 的词
这样逻辑清晰、无歧义,对中文混合、带标点、缩写等情况也更鲁棒。正则适合模式化定位,统计更适合语义判断。











