Python count()函数不统计重叠子串,如何实现重叠计数?
统计Python字符串中重叠子串的出现次数
Python自带的str.count()方法确实不会统计重叠的子串,比如'rrr'.count('rr')只会返回1。要实现重叠统计,试试下面两种实用的方法:
方法一:手动遍历检查
直接遍历字符串的每个可能起始位置,逐个判断子串是否匹配,每次只移动1个字符(而不是str.count()默认的子串长度)。
示例代码:
def count_overlapping(s, sub): count = 0 sub_len = len(sub) s_len = len(s) # 遍历到字符串末尾前sub_len的位置即可 for i in range(s_len - sub_len + 1): if s[i:i+sub_len] == sub: count += 1 return count # 测试 print(count_overlapping('rrr', 'rr')) # 输出2 print(count_overlapping('aaaa', 'aa')) # 输出3
这个方法逻辑直白,容易理解,也不用依赖额外库,适合处理简单场景。
方法二:正则正向预查
利用正则的**正向预查(lookahead)**特性,它是零宽度匹配,不会消耗字符串中的字符,所以能捕捉到重叠的子串。
示例代码:
import re def count_overlapping_regex(s, sub): # 用re.escape处理子串中的特殊正则字符,避免出错 pattern = re.compile(r'(?=' + re.escape(sub) + r')') return len(pattern.findall(s)) # 测试 print(count_overlapping_regex('rrr', 'rr')) # 输出2 print(count_overlapping_regex('ababa', 'aba')) # 输出2
这种方法代码更简洁,适合复杂子串的场景,但需要对正则有基础了解。
内容的提问来源于stack exchange,提问作者mi7tom
相关产品推荐
相关产品推荐

