我试图使用Python3和regex计算模式的出现次数。
我的方法目前(基于另一个stackoverflow线程):
count = sum(1 for _ in re.finditer(r'\b{0}\b'.format(re.escape(vals)), doc))
然而,如果' vals'包含句点,例如:
vals = '42.'
doc = 'I like 42. a lot'
当然为了强制这个特定的例子起作用,我可以包括一个句号:'{0}.'
但是那个工作休息时间值不包含句号...
答案 0 :(得分:2)
Wen vals是42.
,你的正则表达式是\b42\.\b
。在这里,\b
断言必须有一个单词边界,并且因为.
不是一个单词字符,这意味着它不能跟一个单词字符。
你似乎总是希望你的正则表达式后跟一个非单词字符,无论val的最后一个字符是什么,所以只需让你的正则表达式明确地说,改为:
r'\b{0}(?!\w)'.format(re.escape(vals))
同样,您可能希望\b
在开头更改为(?<!\w)
(前面没有单词字符)。