如何用Python找出字符串中重叠序列的数量?
4 个回答
1
这应该能帮到你:
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))
你可以在这里查看:http://codepad.org/pmkKXmWB
没有对长字符串进行性能测试,看看它是否足够高效,适合你的使用。
6
一个简单易懂的方法是:
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))))
这里利用了Python可以把布尔值(真和假)当作整数来处理的特点。
10
如果你不想自己写搜索功能,可以使用 re
模块。
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