用Python编译正则表达式

用Python编译正则表达式,第1张

用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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存