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

使用pyparsing.srange构建大字符范围速度极慢,求原因及替代方案

问题原因与解决方案

为什么这段代码速度极慢?

你用srange('[\x80-\U0010FFFF]')生成的是所有非ASCII字符的完整集合,这个范围包含了超过100万个字符(从0x80到0x10FFFF,总计约111万个字符)。pyparsing的Char类在处理这类超大字符集时,会逐个枚举并初始化每个字符的匹配规则,这个过程需要遍历百万级的元素,因此会消耗大量时间(6-8秒)。

替代方案

推荐两种高效的实现方式,无需枚举所有非ASCII字符:

方案1:利用pyparsing的取反操作

直接对ASCII字符范围取反,避免生成超大字符集:

from pyparsing import Char, srange

_non_ascii = ~Char(srange('[\x00-\x7F]'))

~操作符表示“匹配不在该字符集中的字符”,底层通过区间判断实现,初始化几乎瞬间完成。

方案2:使用正则表达式

pyparsing支持直接集成正则表达式,正则引擎对字符区间的处理更高效:

from pyparsing import Regex

_non_ascii = Regex(r'[^\x00-\x7F]')

正则的[^\x00-\x7F]表示匹配任何不在ASCII范围内的字符,底层通过数值区间比较实现,无需枚举字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:41:25