Python如何统计子串在主字符串中出现的次数(含重叠匹配)
问题根因
Python 内置的
str.count()方法仅统计非重叠子串的出现次数。你的示例中两个CDC子串共享了中间的字符C(第一个匹配区间为下标24,第二个匹配区间为下标46),因此默认方法只能返回1次匹配结果。
解决方案
以下是两种常用的兼容重叠场景的统计实现:
- 滑动窗口遍历实现
main_string = "ABCDCDC" find_string = "CDC" count = 0 sub_len = len(find_string) # 遍历所有可能的子串起始位置 for i in range(len(main_string) - sub_len + 1): if main_string[i:i+sub_len] == find_string: count += 1 print(count)
运行输出结果为2,符合预期。
- 正则零宽断言实现
利用正则正向先行断言的零宽度特性,匹配时不会消耗已匹配的字符,天然支持重叠场景统计:
import re main_string = "ABCDCDC" find_string = "CDC" # 用re.escape处理子串,避免子串含正则特殊字符时匹配异常 count = len(re.findall(fr'(?={re.escape(find_string)})', main_string)) print(count)
内容的提问来源于stack exchange,提问作者Alfred Joe Jr
相关产品推荐
相关产品推荐

