在回答这个问题时(并阅读了类似问题的答案),我认为我知道 Python 如何缓存正则表达式。
但后来我想我会测试它,比较两种情况:
- 一个简单的正则表达式的单个编译,然后是该编译的正则表达式的 10 个应用程序。
- 未编译的正则表达式的 10 个应用程序(我预计性能会稍差,因为正则表达式必须编译一次,然后缓存,然后在缓存中查找 9 次)。
然而,结果是惊人的(在 Python 3.3 中):
>>> import timeit
>>> timeit.timeit(setup="import re",
... stmt='r=re.compile(r"\w+")\nfor i in range(10):\n r.search(" jkdhf ")')
18.547793477671938
>>> timeit.timeit(setup="import re",
... stmt='for i in range(10):\n re.search(r"\w+"," jkdhf ")')
106.47892003890324
慢了 5.7 倍以上!在 Python 2.7 中,仍然增加了 2.5 倍,这也超出了我的预期。
正则表达式的缓存在 Python 2 和 3 之间是否发生了变化?文档似乎没有暗示这一点。