谁的正则表达式更快?python还是perl

谁的正则表达式更快?python还是perl,python,regex,perl,Python,Regex,Perl,我在维基页面上看到 python使用非递归实现,如grep和sed,而perl使用简单的草书impl。这是否表明python的正则表达式性能比perl快 这家伙有一个好职位 这不是一个直接的答案,因为Python v。Perl正则表达式的问题似乎是“视情况而定” 如果你担心正则表达式的速度,有几件事你应该研究一下。一种是尽可能使用普通搜索和替换,而不是正则表达式 另一个是使用,它在许多语言中都有很好的包装。根据我的经验,re2比Python中的内置re模块快60%左右,尤其是在“病态”regex

我在维基页面上看到


python使用非递归实现,如grep和sed,而perl使用简单的草书impl。这是否表明python的正则表达式性能比perl快

这家伙有一个好职位


这不是一个直接的答案,因为Python v。Perl正则表达式的问题似乎是“视情况而定”

如果你担心正则表达式的速度,有几件事你应该研究一下。一种是尽可能使用普通搜索和替换,而不是正则表达式

另一个是使用,它在许多语言中都有很好的包装。根据我的经验,re2比Python中的内置re模块快60%左右,尤其是在“病态”regex表达式方面,它可能比使用内置模块所需的时间要长得多。开发re2的Russ Cox在论文中解释了所有这些以及更多


在Python中,我使用并可以证明re2的包装器,它充当re的替代品。CPAN搜索显示,它在Perl中似乎具有相同的功能。

我应该指出,链接文章的作者在其方法中有一个严重的缺陷:一旦Python从字符串编译正则表达式,它就会缓存已编译的正则表达式。与Python相比,Perl在未编译情况下显得如此缓慢的原因是Python正在进行缓存查找,而不是重新编译。你是说不符合要求的数字有缺陷吗?我说的是正则表达式的编译(在执行之后发生),而不是Python代码。在“预编译”版本中,他首先编译表达式;在“非编译”版本中,他传递一个字符串作为正则表达式。我的主张是,将字符串作为正则表达式传递会增加缓存查找的开销,但实际上不会像在Perl中那样重新编译正则表达式。Perl中的“插值字符串循环”测试和Python中的“无预编译”测试实际上并没有完成相同的任务。啊,我看到在文章的底部实际上有一个关于这个问题的讨论,也许他会重做测试并发布结果。有一个标志告诉Perl reg exp引擎表达式没有改变。可能是你想要的。在一般情况下,我们可以比较草书和非草书实现之间的效率吗?不确定这是否回答了你的问题,但其中一个包括RE2和PCRE实现的一些基准。正如您在大多数测试中所看到的,对于较小的文本大小,PCRE实现的速度相同或稍快,但随着总文本大小的增加,re2会将其从水中释放出来。一个简单的Perl
s///
比等效的Perl代码要快。这是因为
s//
引擎是用C编写的。PCRE不是Perl的正则表达式引擎。它是一个单独的库,旨在模拟Perl对标准正则表达式语法/功能的有用扩展。我在测试Perl和Python中对/usr/dict/words的非常简单的搜索时的经验是,Python的CPU时间慢了100倍(仅在这一次测试中)。Perl版本0.03秒用户CPU:
cat/usr/share/dict/words | time Perl-ne'/^和/&&print'| head-5
。。。。Python版本使用3.0秒的用户CPU:
cat/usr/share/dict/words | time py-fx're.match(r“^and”,x)| head-5
(需要为'py'命令提供出色的Pythonpy:)。Python的缓慢是由于正则表达式没有启动/正则表达式编译开销,因为CPU时间随文件大小而变化。