You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:42:22