Python:如何计算子字符串的重叠出现次数

niv*_*ivk 5 python

我想计算像'aa'这样的字符串出现在'aaa'(或'aaaa')中的次数.

最明显的代码给出了错误的(或至少不是直观的)答案:

'aaa'.count('aa')
1 # should be 2
'aaaa'.count('aa')
2 # should be 3
Run Code Online (Sandbox Code Playgroud)

有没有人有一个简单的方法来解决这个问题?

Roh*_*ain 10

来自str.count()文档:

返回[start,end]范围内substring sub 的非重叠出现次数.可选参数start和end被解释为切片表示法.

所以不行.您获得了预期的结果.

如果要计算重叠匹配的数量,请使用regex:

>>> import re
>>> 
>>> len(re.findall(r'(a)(?=\1)', 'aaa'))
2
Run Code Online (Sandbox Code Playgroud)

这将查找所有出现的内容a,后面跟着a.第二个a不会被捕获,因为我们使用了前瞻,这是零宽度断言.


kin*_*all 6

haystack = "aaaa"
needle   = "aa"

matches  = sum(haystack[i:i+len(needle)] == needle 
               for i in xrange(len(haystack)-len(needle)+1))

# for Python 3 use range instead of xrange
Run Code Online (Sandbox Code Playgroud)