【发布时间】:2018-07-30 17:16:48
【问题描述】:
我偶然发现了以下代码:
import re
regex_compiled = re.compile('\d{2}-\d{3,5}')
res = re.search(regex_compiled, '12-9876')
我的印象是 re.search 试图编译第一个已经编译的参数,所以它应该出错,或者应该在重复尝试编译之前调用 regex_compiled.__repr__() 或 regex_compiled.__str__()!
为了确定我将它与regex_compiled.search(...进行了比较:
>>> from timeit import timeit
>>> timeit("import re; regex_compiled = re.compile('\d{2}-\d{3,5}'); res = re.search(regex_compiled, '12-9876')")
1.3797054840251803
>>> timeit("import re; regex_compiled = re.compile('\d{2}-\d{3,5}'); res = regex_compiled.search('12-9876')")
0.7649686150252819
>>>
鉴于调试到 re.search(在 CPython v. 2 和 v. 3 中)显示 compiled 模式被重用,我很困惑从何而来!我希望有人可以帮助阐明这一点。
执行环境:Ubuntu 16.04、64b
【问题讨论】:
-
我不知道这是重复的。我完全了解缓存机制,这就是为什么我偶然发现时间差异很大的原因。这种差异让我很困扰。
标签: python regex python-2.7 python-3.5