您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

用Python编译正则表达式

用Python编译正则表达式

嗯 这很奇怪。到目前为止,我的知识(以及从其他来源(从该问题获得的信息))提出了我的初步答案:

一个答案 Python会缓存您使用的最后100个正则表达式,因此,即使您没有显式编译它们,也不必每次使用时都重新编译它们。

但是,有两个缺点:达到100个正则表达式的限制时,整个缓存将被删除,因此,如果您连续使用101个不同的正则表达式,则每次都会重新编译每个正则表达式。好吧,那是不太可能的,但是仍然如此。

其次,为了找出是否已经编译了正则表达式,解释器每次都需要在高速缓存中查找正则表达式,这确实需要一点额外的时间(但由于字典查找非常快,所以不需要很多)。

因此,如果您明确编译正则表达式,则可以避免执行此额外的查找步骤。

更新资料 我刚刚做了一些测试(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

因此,似乎没有进行任何缓存。也许这是在特殊条件下timeit.timeit()跑步的怪癖?

另一方面,在Python 2.7中,区别并不明显:

>>> import timeit
>>> timeit.timeit(setup="import re", stmt='''r=re.compile(r"\w+")\nfor i in range(10):\n r.search("  jkdhf  ")''')
7.248294908492429
>>> timeit.timeit(setup="import re", stmt='''for i in range(10):\n re.search(r"\w+","  jkdhf  ")''')
18.26713670282241
python 2022/1/1 18:29:30 有177人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶