def count(sub, string):
count = 0
for i in xrange(len(string)):
if string[i:].startswith(sub):
count += 1
return count
count('baba', 'abababa baba alibababa')
#output: 5
如果你喜欢简短的片段,你可以让它不那么可读,但更聪明:
def count(subs, s):
return sum((s[i:].startswith(subs) for i in xrange(len(s))))
matches =[]
st = 'abababa baba alibababa'
needle = 'baba'
for i in xrange(len(st)-len(needle)+1):
i = st.find(needle,i,i+len(needle))
if(i >= 0):
matches.append(st.find(needle,i,i+len(needle)))
print(str(matches))
In [22]: import re
In [23]: haystack = 'abababa baba alibababa'
In [24]: needle = 'baba'
In [25]: matches = re.finditer(r'(?=(%s))' % re.escape(needle), haystack)
In [26]: print [m.start(1) for m in matches]
[1, 3, 8, 16, 18]
上面打印出所有匹配项(可能重叠)的起始位置。
如果你只需要数数,下面的方法就可以了:
In [27]: len(re.findall(r'(?=(%s))' % re.escape(needle), haystack))
Out[27]: 5
一个简单易懂的方法是:
如果你喜欢简短的片段,你可以让它不那么可读,但更聪明:
这使用了Python可以像对待整数一样对待布尔值的事实。
这将有助于您:
看这里:http://codepad.org/pmkKXmWB
没有对它进行长字符串的基准测试,看看它是否足够有效供您使用。
除了编写自己的搜索函数之外,还可以使用
re
模块:上面打印出所有匹配项(可能重叠)的起始位置。
如果你只需要数数,下面的方法就可以了:
相关问题 更多 >
编程相关推荐