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

2024-04-25 16:35:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了一件奇怪的事

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)

第一个密码怎么了?你知道吗

***更新

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

Tags: 代码inreforsearchvaluegroupunit
1条回答
网友
1楼 · 发布于 2024-04-25 16:35:00

一般来说,对于regex,我建议编译它们。你知道吗

这个答案当然不能回答速度差是如何产生的。但我的一个猜测是,Python运行时就是这样做的:

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

您可以通过自己编译来绕过这个问题,如下所示:

regex_unit_compiled = re.compile(regex_unit)

之后,在循环中使用它,如下所示:

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

如果我的猜测正确与否,使用编译的正则表达式应该会更好。你知道吗

相关问题 更多 >