查找字符串中存在子字符串的次数-Python

查找字符串中存在子字符串的次数-Python,python,string,Python,String,我试图找到子字符串的#倍,在本例中,“bob”出现在字符串中。我的解决方案适用于某些字符串,但不适用于所有字符串。例如,下面的答案应该是7,但我返回5 你知道为什么吗 谢谢 s = 'bobbisbobobugbobobbobbobo' print('Number of times bob occurs is: ', s.count('bob')) 问题是s.count()返回范围[start,end]中子字符串sub的非重叠出现次数 要计算重叠字符串,请使用正则表达式 import re

我试图找到子字符串的#倍,在本例中,“bob”出现在字符串中。我的解决方案适用于某些字符串,但不适用于所有字符串。例如,下面的答案应该是7,但我返回5

你知道为什么吗

谢谢

s = 'bobbisbobobugbobobbobbobo'
print('Number of times bob occurs is: ', s.count('bob'))

问题是
s.count()
返回范围[start,end]中子字符串sub的非重叠出现次数

要计算重叠字符串,请使用正则表达式

import re

text = 'bobbisbobobugbobobbobbobo'
print(len(re.findall('(?=bob)', text)))

问题是
s.count()
返回范围[start,end]中子字符串sub的非重叠出现次数

要计算重叠字符串,请使用正则表达式

import re

text = 'bobbisbobobugbobobbobbobo'
print(len(re.findall('(?=bob)', text)))

你似乎想要重复计数<不幸的是,code>str.count无法到达目标,因为它不重叠子字符串搜索。尝试切片和计数

这是一个带有
集合的解决方案。计数器
,尽管它可以用任何其他方法来完成,只要你把它切分正确

from collections import Counter

text = 'bobbisbobobugbobobbobbobo'
term = 'bob'
c = Counter([text[i : i + len(term)] for i in range(len(text))])
print(c[term])


你似乎想要重复计数<不幸的是,code>str.count无法到达目标,因为它不重叠子字符串搜索。尝试切片和计数

这是一个带有
集合的解决方案。计数器
,尽管它可以用任何其他方法来完成,只要你把它切分正确

from collections import Counter

text = 'bobbisbobobugbobobbobbobo'
term = 'bob'
c = Counter([text[i : i + len(term)] for i in range(len(text))])
print(c[term])


您的解决方案不起作用,因为
str.count
不计算重叠匹配

尽管还有很多其他解决方案,但另一种可能的方法是使用高级模块:


您的解决方案不起作用,因为
str.count
不计算重叠匹配

尽管还有很多其他解决方案,但另一种可能的方法是使用高级模块:


count
统计不重叠的匹配项。这就是为什么它小于您在范围(len(s)-(len('bob')-1))中看到的i的总和('bob'==s[i:i+len('bob')))
count
统计非重叠匹配。这就是为什么它比你在
s
sum('bob'==s[i:i+len('bob'))中看到的要小,因为i在范围内(len(s)-(len('bob')-1))
谢谢,伙计,你能告诉我们string.count和re.findall之间的区别吗,由于count函数返回不同的值,findall函数返回不同的值,而且在您的代码中,您以“(?=bob)”的格式传递了子字符串。请您解释一下。为什么以这种格式传递子字符串我的意思是什么是内部逻辑你能解释一下吗?Hanks,buddy你能告诉我们string.count和re.findall之间的区别吗?因为count函数返回不同的值,findall函数返回不同的值,而且在你的代码中,您以“(?=bob)”的格式传递了子字符串。请您向我们解释一下。为什么用这种格式传递子字符串我的意思是什么是内部逻辑你能解释一下吗