用于在字符串中精确找到一个单词"n"次的正则表达式
我想在Python中写一个正则表达式,用来查找一个字符串中某个单词出现了“n”次。
比如说,如果我想找一个能匹配“cat”这个词恰好出现两次的表达式,我该怎么做呢?
这个表达式应该能匹配“蓝色的猫对红色的猫在树上说话”这句话,因为这里面“cat”这个词正好出现了两次。
但是,它不应该匹配“猫很大”这句话,因为这里面“cat”只出现了一次。
同样,它也不应该匹配“狗是黄色的”这句话,原因也是类似的。
非常感谢!
编辑
大家好
抱歉把问题搞得太复杂了,但我忘了提一件事。
如果我想找“cat”恰好出现两次,“The catcat runs”这句话也会被匹配上。
5 个回答
2
使用 findall
和 len
似乎是一个解决办法。
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")