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

bon*_*ing 4 python regex optimization perl

从Perl的文档:

study需要额外的时间来研究SCALAR($ _,如果未指定),期望在下一次修改之前对字符串进行许多模式匹配.这可能会也可能不会节省时间,具体取决于您要搜索的模式的性质和数量以及要搜索的字符串中的字符频率分布;

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

tch*_*ist 8

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

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

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


Dou*_*gal 6

据我所知,没有像Python内置的那样.但根据perldoc:

研究工作的方式是这样的:要搜索的字符串中的每个字符的链接列表,所以我们知道,例如,所有'k'字符都在哪里.根据从某些C程序和英文文本构造的一些静态频率表,从每个搜索字符串中选择最稀有的字符.只检查包含这种"最稀有"字符的那些地方.

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

esmre有点模糊.而作为@Frg注意,你需要使用re.compile,如果你重复使用一个单一的正则表达式(以避免重新解析正则表达式本身一遍又一遍).

或者你可以使用后缀树(这里是一个实现,或者这里是带有unicode支持C扩展)或后缀数组(实现).