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

从指定格式字符串提取数字:split与正则表达式的性能优劣对比

性能对比与方案建议

一、性能:split() 更优

对于你这种固定格式的字符串,split() 方法的性能明显优于正则表达式:

  • split('/') 是底层的字符串分割操作,逻辑简单直接,不需要启动正则引擎的复杂匹配流程,内存和CPU开销都更小。

  • 具体实现示例:

    s = "/good/312321312/bad/3213122131"
    parts = s.split('/')
    num1 = int(parts[2])
    num2 = int(parts[4])
    

    分割后直接取固定索引的元素,一步到位。

  • 正则表达式虽然代码简洁(比如用re.findall(r'\d+', s)),但正则引擎需要先解析匹配模式,再遍历字符串做模式匹配,在这种规则固定的场景下,额外的解析和匹配逻辑会带来不必要的性能损耗。

二、其他更高效的方案

如果追求极致性能,还可以用字符串索引定位+截取的方式,避免创建分割后的数组:

s = "/good/312321312/bad/3213122131"
# 提取第一个数字
start1 = s.index('/', 1) + 1
end1 = s.index('/', start1)
num1 = int(s[start1:end1])
# 提取第二个数字
start2 = s.index('/', end1 + 1) + 1
num2 = int(s[start2:])

这种方法直接定位字符位置截取,减少了数组创建的内存开销,性能和split()接近甚至略优。

总结

  • 若字符串格式完全固定,优先选split()或索引截取,性能更好;
  • 若字符串格式可能有变化(比如路径部分可能有变动,但数字位置不固定),再考虑正则表达式,牺牲一点性能换灵活性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:49:53