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函数应该怎么用?

python 正则(re.compile()/re.findall())

python 中的 re.compile 函数(转)

python 正则表达式 re,compile速度慢 ,怎样可以使的re.compile的速度更快

Python 正则re模块之compile()和findall()详解