Perl的`study`是否有Python等价物?

时间:2012-03-05 21:23:25

标签: python regex perl optimization

来自Perl的documentation

  

study需要额外的时间来学习SCALAR(如果未指定,则为$ _)   字符串上的许多模式匹配在下次修改之前。这可能会也可能不会保存   时间,取决于您搜索的模式的性质和数量以及分布   要搜索的字符串中的字符频率;

我正在尝试加速一些正在用Python编写的正则表达式驱动的解析,我记得Perl的这个技巧。我意识到我必须进行基准测试以确定是否存在加速,但我找不到Python中的等效方法。

2 个答案:

答案 0 :(得分:8)

Perl的研究不再那么重要了。编译的正则表达式比创建study时更加智能。

例如,它使用Aho-Corasick预测将备选方案编译成trie结构。

使用perl -Mre=debug运行,以查看正则表达式编译器和执行引擎适用的各种聪明之处。

答案 1 :(得分:6)

据我所知,Python中没有这样的内容。但根据the perldoc

  

学习的方式是这样的:一个链接列表中的每个角色   要搜索的字符串,所以我们知道,例如,所有的   'k'字符是。从每个搜索字符串中,最稀有的字符是   选择,基于一些静态频率表构建   C程序和英文文本。只有那些包含这个的地方   检查“最稀有”字符。

这听起来不太复杂,你可能会把自己的东西放在一起。

esmre有点模糊。 as @Frg noted,如果您正在重复使用单个正则表达式(以避免反复解析正则表达式本身),则需要使用re.compile

或者您可以使用suffix trees(此处为one implementation,或此处为C extension with unicode support)或suffix arraysimplementation)。