【问题标题】:What does python's "re.compile" do?python的“re.compile”有什么作用?
【发布时间】:2013-12-21 13:54:24
【问题描述】:

当您对原始字符串和通过 re.compile 传递的字符串运行 re.match 时,后者有何不同?通过 re.compile 传递的字符串发生了什么变化?

【问题讨论】:

  • 先看文档...
  • 这个问题与这个问题类似:stackoverflow.com/questions/452104/… 即使你被标记了(链接中的-1 vs 155)我认为这是一个很好的问题。 Stackoverflow python社区有“先投反对票,后理解问题”的习惯

标签: python regex


【解决方案1】:

它将一个正则表达式编译成一个正则表达式对象。查看docs 了解更多信息。

【讨论】:

  • re.match(pattern, searchstring) 从模式内部构建一个 PatternObject,然后将 searchstring 应用于 PatternObject。如果要在多个搜索字符串上运行相同的模式,则应该将模式编译成 PatternObject 以消除冗余工作。底线:您的代码将执行相同但运行速度更快。
  • @IceArdor -- 虽然您在技术上是正确的,但 re 实际上在 dict 中缓存了一堆正则表达式 -- 因此,如果您不显式编译它们,re 将编译在第一次调用时使用正则表达式,并在后续调用中使用编译后的版本以提高效率。如果您的程序使用超过re._MAXCACHE 正则表达式导致缓存被清除和重建,您只会看到显着的加速。我认为你应该编译正则表达式是为了代码清晰,而不是为了速度。
  • 啊。感谢您的澄清。我的 re._MAXCACHE=100,我使用了大约 1000 种模式,所以 re 的内部缓存没有帮助。 题外话:我总是在为编译的模式对象选择变量名时遇到问题。有什么建议吗?
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2018-12-29
  • 2014-02-01
相关资源
最近更新 更多