我试图找到一个子串的次数,在这种情况下' bob'出现在一个字符串中。我的解决方案适用于某些字符串,但不是所有字符串。例如,以下答案应为7,但我将返回5.
任何想法为什么?
由于
s = 'bobbisbobobugbobobbobbobo'
print('Number of times bob occurs is: ', s.count('bob'))
答案 0 :(得分:3)
问题是s.count()
返回[start,end]范围内子串sub的非重叠出现次数。
要计算重叠字符串,请使用正则表达式
import re
text = 'bobbisbobobugbobobbobbobo'
print(len(re.findall('(?=bob)', text)))
答案 1 :(得分:1)
您的解决方案不起作用,因为str.count
不计算重叠匹配。
尽管还有很多其他解决方案,但另一种可能的方法是使用高级regex模块:
import regex as re
s = 'bobbisbobobugbobobbobbobo'
print(len(re.findall("bob", s, overlapped=True)))
# 7
答案 2 :(得分:0)
您似乎想要重叠计数。不幸的是,str.count
不会让你到那里,因为它不会重叠子字符串搜索。尝试切片和计数。
这是一个带有collections.Counter
的解决方案,但只要您将其切片,就可以通过任何其他方式完成。
from collections import Counter
text = 'bobbisbobobugbobobbobbobo'
term = 'bob'
c = Counter([text[i : i + len(term)] for i in range(len(text))])
print(c[term])
7