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

Python正则表达式如何设置选择条件及过滤指定长度匹配结果

解决方案

方法一:过滤统计结果

现有代码已经能拿到所有匹配项,只需在输出前筛选出长度大于8的条目即可。可以通过列表推导式对Counter的结果进行过滤,保留符合长度要求的项:

import re
from collections import Counter

pattern = r"0+1+0+1+0+1+"
test_str = '0101010110110110110110110101010111011101110111101111010101111010111010101111011010101011011011011011011011'

cnt = Counter(re.findall(pattern, test_str))
# 过滤长度>8的条目,保持原降序排序
filtered_result = [(k, v) for k, v in cnt.most_common() if len(k) > 8]
print(filtered_result)

运行结果:

[('011011011', 2), ('0111011101111', 1), ('010111101', 1), ('0111101101', 1)]

方法二:在正则中直接限制长度

如果想从匹配源头就排除短字符串,可以用正向预查((?=.{9,}))添加长度约束。这个预查会检查当前位置开始的字符串至少有9个字符(即长度>8),但不会消耗字符,完全不影响原模式的匹配逻辑:

import re
from collections import Counter

# 新增正向预查,限制匹配字符串长度≥9
pattern = r"(?=.{9,})0+1+0+1+0+1+"
test_str = '0101010110110110110110110101010111011101110111101111010101111010111010101111011010101011011011011011011011'

cnt = Counter(re.findall(pattern, test_str))
print(cnt.most_common())

运行结果与方法一一致,直接跳过了长度≤8的匹配项。

正则字符数量条件说明

正则中控制字符/组出现次数的常用语法:

  • {n}:精确匹配n次
  • {n,}:至少匹配n次
  • {n,m}:匹配n到m次(包含两端)
  • 简写规则:*等价于{0,},+等价于{1,},?等价于{0,1}

本次用到的(?=.{9,})是正向预查,属于正则断言的一种——它仅做条件检查,不会将检查的字符纳入最终匹配结果,非常适合在不修改原有匹配规则的前提下,额外添加长度这类全局约束。

内容的提问来源于stack exchange,提问作者RAnsari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:20:23