gpt4 book ai didi

Python 正则表达式比预期慢

转载 作者:太空狗 更新时间:2023-10-29 19:26:39 32 4
gpt4 key购买 nike

我读了一个很酷的article关于如何避免创建缓慢的正则表达式。一般来说,它看起来越长越明确,正则表达式完成的速度越快。贪婪的正则表达式可能会呈指数级变慢。

我想我会通过测量用一个不那么复杂/贪婪的语句完成一个更复杂/明确的语句所花费的时间来测试它。在大多数情况下,一切似乎都是正确的,但我有一个贪婪的陈述出现得更慢。这里有两个例子:

import re
from timeit import timeit

# This works as expected, the explicit is faster than the greedy.
# http_x_real_ip explicit
print(timeit(setup="import re", stmt='''r = re.search(r'(\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3})', '192.168.1.1 999.999.999.999')''', number=1000000))
1.159849308001867

# http_x_real_ip greedy
print(timeit(setup="import re", stmt='''r = re.search(r'((?:\d{1,3}\.){3}\d{1,3})', '192.168.1.1 999.999.999.999')''', number=1000000))
1.7421739230003368

# This does not work as expected, greedy is faster.
# time_local explicit
print(timeit(setup="import re", stmt='''r = re.search(r'(\d{1,2}/\w{3}/[2][0]\d{2}:\d{2}:\d{2}:\d{2}\s[+][0]{4})', "[23/Jun/2015:11:10:57 +0000]")''', number=1000000))
1.248802040994633

# time_local greedy
print(timeit(setup="import re", stmt='''r = re.search(r'\[(.*)\]', "[23/Jun/2015:11:10:57 +0000]")''', number=1000000))
1.0256699790043058

local_time 显式正则表达式是否写得不好?

最佳答案

正则表达式回溯得越多,它就越慢。

这可能不适用于非常小的输入数据。但是,谁会关心小数据上的性能呢? :D


这篇文章很好地涵盖了这个主题:

这个问题也有有趣的贡献:

关于Python 正则表达式比预期慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164568/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com