我想找出一个字符串中一个子串的所有计数(重叠和非重叠)。我找到了两个答案,一个是使用正则表达式,这不是我的本意,另一个比我需要的效率低得多。我需要像这样的东西:
'ababaa'.count('aba') == 2
str.count()
只计算简单的子字符串。我该怎么办?
发布于 2015-08-29 14:29:42
def sliding(a, n):
return (a[i:i+n] for i in xrange(len(a) - n + 1))
def substring_count(a, b):
return sum(s == b for s in sliding(a, len(b)))
assert list(sliding('abcde', 3)) == ['abc', 'bcd', 'cde']
assert substring_count('ababaa', 'aba') == 2
发布于 2015-08-29 14:27:17
这样做有效吗?
def count(string, substring):
n = len(substring)
cnt = 0
for i in range(len(string) - n):
if string[i:i+n] == substring:
cnt += 1
return cnt
print count('ababaa', 'aba') # 2
我不知道是否有更有效的解决方案,但这应该是可行的。
发布于 2015-08-29 14:27:34
在这里,使用re.finditer()是实现您想要的最好方法。
import re
def get_substring_count(s, sub_s):
return sum(1 for m in re.finditer('(?=%s)' % sub_s, s))
get_substring_count('ababaa', 'aba')
# 2 as response
https://stackoverflow.com/questions/32283255
复制相似问题