IMO在BABAB中发生了2次子串BAB 为什么Python返回1?python为什么“BABAB”.count(“BAB”)等于1?
print "BABAB".count("BAB")
任何帮助,将理解
IMO在BABAB中发生了2次子串BAB 为什么Python返回1?python为什么“BABAB”.count(“BAB”)等于1?
print "BABAB".count("BAB")
任何帮助,将理解
每the documentation(重点煤矿):
返回的数目非重叠的范围出现串 子的[开始,结束]。可选参数开始和结束被解释为切片符号。
字符串是“BABAB”。通过使用count()它将返回如下所示的非重叠匹配的数目:“BAB | AB”,因此它只会计数一次。尝试使用字符串“BABBAB”,您将得到2个数字。例如:
>>> x = "BABAB"
>>> x.count("BAB")
1
>>> x = "BABBAB"
>>> x.count("BAB")
2
str.count
仅返回number of non-overlapping matches,如果你想获得所有比赛的数量包括重叠的比赛,你可以使用正则表达式与re.findall
>>> re.findall(r'(?=(BAB))',"BABAB")
['BAB', 'BAB']
而对于计算匹配的数量,您可以使用内的发电机表达sum
功能和用途re.finditer
代替re.findall
其更存储器的使用的术语优化:
>>> sum(1 for _ in re.finditer(r'(?=(BAB))',"BABAB"))
2
(?=(BAB))
为符合其随后BAB
的地方,一个positive look-ahead。
'count'只能找到非重叠的匹配项。 – thefourtheye
找到我在找什么:http://stackoverflow.com/questions/2970520/string-count-with-overlapping-occurrences – Gnuz
@Gnuz也许做**之前**问下次研究 – jonrsharpe