我发现以下代码:
我发现以下代码:
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中),编译的模式被重复使用!希望有人能帮助解决这个问题。
执行环境:Ubuntu 16.04,64位