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

如何高效用正则从百万级字符串列表中排除20-22位数字项

优化百万级字符串列表过滤的方案

你的代码耗时主要有三个核心问题:

  • 两次遍历列表,且第二次过滤时用x not in exclusao2,列表的in操作是O(n)复杂度,百万级数据下会变成O(n²)的耗时灾难
  • 正则表达式没有预编译,每次循环都要重新解析编译,额外消耗时间
  • 正则表达式用了不必要的环视逻辑,匹配效率低

下面是两种高效优化方案,都能把耗时从20分钟压缩到几秒内:

方案1:用预编译正则直接过滤

先编译匹配20~22位纯数字的正则,然后单次遍历完成过滤:

import re

# 预编译正则,确保匹配整个字符串是20-22位数字
filter_pattern = re.compile(r'^\d{20,22}$')
lines2 = [item for item in lines2 if not filter_pattern.match(item)]

方案2:用字符串内置方法(更快)

直接用len()判断长度,isdigit()判断是否全数字,比正则的解析开销更小:

lines2 = [item for item in lines2 if not (20 <= len(item) <= 22 and item.isdigit())]

优化原理说明

  1. 去掉了冗余的两次遍历:直接在列表推导式里完成判断,只遍历一次列表
  2. 替换O(n)的列表查找为直接条件判断:彻底避免了原代码中x not in exclusao2的巨量耗时
  3. 简化匹配逻辑:不管是正则还是内置方法,都只做必要的判断,去掉了原正则中没必要的前后数字环视

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:17