用于在字符串中精确找到一个单词"n"次的正则表达式

1 投票
5 回答
1749 浏览
提问于 2025-04-17 04:50

我想在Python中写一个正则表达式,用来查找一个字符串中某个单词出现了“n”次。

比如说,如果我想找一个能匹配“cat”这个词恰好出现两次的表达式,我该怎么做呢?

这个表达式应该能匹配“蓝色的猫对红色的猫在树上说话”这句话,因为这里面“cat”这个词正好出现了两次。

但是,它不应该匹配“猫很大”这句话,因为这里面“cat”只出现了一次。

同样,它也不应该匹配“狗是黄色的”这句话,原因也是类似的。

非常感谢!

编辑

大家好

抱歉把问题搞得太复杂了,但我忘了提一件事。

如果我想找“cat”恰好出现两次,“The catcat runs”这句话也会被匹配上。

5 个回答

2

使用 findalllen 似乎是一个解决办法。

2

这样理解怎么样:

re.match(r'(.*\bcat\b){2}', 'The blue cat talks to the red cat in the tree')

这里的 {2} 表示“重复2次”。如果你想重复7次,就用 {7}\b 是一个单词边界;在这个例子中,“蓝色的猫”里的“猫”会匹配,但“验证”就不行。还有 .* 可以匹配任何字符串。

你可能想看看 这个 re 的文档

3

不要因为正则表达式存在就去使用它。

words = text.split()
print words.count('cat')

正如Vincent所指出的,这假设所有的单词都是用空格分开的。

words = re.findall("\b\w*") 

这可能是更好的选择。不过,是否真的需要这样做,取决于你帖子中没有提供的细节。

编辑

如果你根本不在乎单词的边界,那就更没有理由使用正则表达式了。

print text.count("cat")

撰写回答