python中许多正则表达式的速度

Wil*_*uck 4 python regex performance

我正在编写一个处理大量字符串/文件的python程序.我的问题是,我将会收到一段相当短的文本,我将需要搜索相当广泛的单词/短语的实例.

我想我需要编译正则表达式作为在文本中匹配这些单词/短语的方法.但是,我担心的是,这需要花费很多时间.

我的问题是,重复编译正则表达式,然后搜索一小段文本来查找匹配的过程有多快?使用一些字符串方法会更好吗?

编辑:所以,我想我的问题的一个例子是:使用一个正则表达式进行编译和搜索的成本是多少,而不是说,在字符串中迭代"if"字,说5次?

Mic*_*lon 5

如果速度至关重要,那么在决定如何编写生产应用程序之前,最好先运行一些测试.

首先,你说你正在搜索的单词表明你可以使用split()来分解空格上的字符串.然后使用简单的字符串比较来进行搜索.

绝对要编译正则表达式并进行时序测试,将其与普通字符串函数进行比较.检查字符串类的文档以获取完整列表.

  • 搜索字符串列表将比在文本块上进行重新搜索慢几个数量级。如果它是简单的字符串,则组合正则表达式仍会更快。 (2认同)

Aar*_*lla 5

您应该尝试使用|运算符将所有正则表达式编译为单个正则表达式.这样,regexp引擎将为您完成大部分优化.使用分组运算符()确定匹配的正则表达式.

  • 例如,`r'axxx | byyy'`将比检查'r'axxx'`然后单独检查'r'byyy'更快,因为正则表达式引擎会为你做"切换"(它将检查第一个字符,然后忽略其中一个模式).因此更复杂的正则表达式并不意味着"更慢". (2认同)

Joh*_*hin 5

您的要求似乎是在文本中搜索字符串集合中任何一个字符串的第一次出现。大概您希望重新开始搜索以查找下一个匹配项,依此类推,直到搜索完字符串为止。仅涉及普通的旧字符串比较。

此任务的经典算法是Aho-Corasick,它有一个Python 扩展(用 C 编写)。这应该会击败任何使用该模块的替代方案re