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

求助:如何用正则表达式查找出现三次及以上的单词?

解决思路:找出出现三次及以上的单词

你的问题我懂了——想用正则找出字符串里出现≥3次的单词,但(\b(\w+)\b(?=.*\1)){3,}没效果,这是因为这个表达式的逻辑和你想的不一样。

先说说原正则为什么失效

\b(\w+)\b(?=.*\1)的作用是匹配至少出现两次的单词(当前单词后面还有至少一个重复)。但你给它加{3,}后,它变成了要求连续三次匹配这个模式——也就是要连续三个相同的单词(比如foo foo foo),但你的字符串里foo是分散在其他单词中间的,自然匹配不到。

两个可行的解决方案

方案一:正则提取+统计次数(推荐,简单可靠)

正则本身擅长匹配模式,但统计次数交给编程语言的工具会更高效直观。步骤很简单:

  1. 用\b\w+\b提取字符串里所有的单词
  2. 统计每个单词的出现次数
  3. 筛选出次数≥3的单词

举个Python的例子:

import re
s = "foo bar foo x foo y bar foo"
# 提取所有单词
all_words = re.findall(r'\b\w+\b', s)
# 统计次数
word_count = {}
for word in all_words:
    word_count[word] = word_count.get(word, 0) + 1
# 筛选结果
target_words = [word for word, count in word_count.items() if count >= 3]
print(target_words)  # 输出: ['foo']

方案二:纯正则匹配(适合演示,需注意局限性)

如果一定要用正则直接匹配,可以用这个表达式:

\b(\w+)\b(?=(?:.*?\b\1\b){2,})

它的逻辑是:匹配一个单词,同时断言这个单词后面至少还有两次完整的重复(加上当前的一次,总共就是三次及以上)。

测试你的字符串,它会匹配到所有的foo实例,你可以对匹配结果去重,得到唯一的目标单词。不过要注意:这个正则在长字符串里效率可能不高,因为每次匹配都要反复扫描后续内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:37:37