python的“re.compile”有啥作用?
Posted
技术标签:
【中文标题】python的“re.compile”有啥作用?【英文标题】:What does python's "re.compile" do?python的“re.compile”有什么作用? 【发布时间】:2013-12-21 13:54:24 【问题描述】:当您对原始字符串和通过 re.compile 传递的字符串运行 re.match 时,后者有何不同?通过 re.compile 传递的字符串发生了什么变化?
【问题讨论】:
先看文档... 这个问题与这个问题类似:***.com/questions/452104/… 即使你被标记了(链接中的-1 vs 155)我认为这是一个很好的问题。 *** python社区有“先投反对票,后理解问题”的习惯 【参考方案1】:它将一个正则表达式编译成一个正则表达式对象。查看docs 了解更多信息。
【讨论】:
re.match(pattern, searchstring) 从模式内部构建一个 PatternObject,然后将 searchstring 应用于 PatternObject。如果要在多个搜索字符串上运行相同的模式,则应该将模式编译成 PatternObject 以消除冗余工作。底线:您的代码将执行相同但运行速度更快。 @IceArdor -- 虽然您在技术上是正确的,但re
实际上在 dict 中缓存了一堆正则表达式 -- 因此,如果您不显式编译它们,re
将编译在第一次调用时使用正则表达式,并在后续调用中使用编译后的版本以提高效率。如果您的程序使用超过re._MAXCACHE
正则表达式导致缓存被清除和重建,您只会看到显着的加速。我认为你应该编译正则表达式是为了代码清晰,而不是为了速度。
啊。感谢您的澄清。我的 re._MAXCACHE=100,我使用了大约 1000 种模式,所以 re 的内部缓存没有帮助。 题外话:我总是在为编译的模式对象选择变量名时遇到问题。有什么建议吗?以上是关于python的“re.compile”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
python-24: re 模块 之三 re.compile
python 正则(re.compile()/re.findall())