来自Perl的documentation:
study
需要额外的时间来学习SCALAR(如果未指定,则为$ _) 字符串上的许多模式匹配在下次修改之前。这可能会也可能不会保存 时间,取决于您搜索的模式的性质和数量以及分布 要搜索的字符串中的字符频率;
我正在尝试加速一些正在用Python编写的正则表达式驱动的解析,我记得Perl的这个技巧。我意识到我必须进行基准测试以确定是否存在加速,但我找不到Python中的等效方法。
答案 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 arrays(implementation)。