Skip to main content
 首页 » 编程设计

python之使用 python 的循环内正则表达式搜索非常慢

2024年10月24日39arxive

我发现了一个奇怪的事情

for el in values: 
    unit=re.search(regex_unit, el, re.IGNORECASE).group() 
    value=re.search(regex_value, el, re.IGNORECASE).group() 
    print("Unit: "+unit+" - "+"Value: "+value) 

这段代码很慢,但如果我这样写,它会非常快...

for el in values: 
    unit=re.search(regex_unit, el, re.IGNORECASE).group() 
    print("Unit: "+unit) 
for el in values: 
    value=re.search(regex_value, el, re.IGNORECASE).group() 
    print("Value: "+value) 

第一段od代码有什么问题?

*** 更新

regex_unit="(kb|mb|gb)" 
regex_value="\d" 

请您参考如下方法:

对于正则表达式,一般来说,我建议编译它们。

这个答案当然没有回答问题,速度差是怎么来的。但我的一个猜测是,Python 运行时就是这样做的:

如果它必须执行正则表达式,它会编译它并缓存结果。如果它在没有其他正则表达式的循环内运行(如在您的第二个代码中),则使用缓存版本。但是如果它与其他正则表达式交替使用,缓存的版本总是被覆盖并且必须总是重新创建,这会大大降低速度,因为编译步骤必须一次又一次地完成。

你可以通过自己编译来绕过这个问题,就像这样:

regex_unit_compiled = re.compile(regex_unit) 

之后,像这样在循环中使用它:

unit=regex_unit_compiled.search(el, re.IGNORECASE).group() 

无论我的猜测是否正确,使用编译后的正则表达式你应该会更好。