Python中多个正则表达式的速度

5 投票
9 回答
22365 浏览
提问于 2025-04-15 16:17

我正在写一个处理很多字符串和文件的Python程序。我的问题是,我会得到一段相对较短的文本,然后需要在里面查找很多不同的单词或短语。

我在想,可能需要用正则表达式来匹配这些单词和短语。不过,我有点担心,这样做会花很多时间。

我想问的是,反复编译正则表达式,然后在一小段文本中搜索匹配的过程到底有多快?我是不是应该考虑用其他字符串方法来做这件事?

补充一下:我想举个例子来说明我的问题:编译一个正则表达式并搜索的成本和用'if "word" in string'这种方式查找5次相比,哪个更耗时呢?

9 个回答

5

你的需求似乎是要在一段文字中查找一组字符串中第一个出现的那个。然后你可能想继续查找下一个出现的,依此类推,直到所有的字符串都被查找完。这个过程只涉及简单的字符串比较。

完成这个任务的经典算法是Aho-Corasick算法,它有一个Python扩展(用C语言写的)。这个算法的效率会比使用re模块的其他方法要高得多。

6

你应该把所有的正则表达式合并成一个,用 | 这个符号。这样,正则表达式引擎会帮你做大部分的优化。使用分组符号 () 来判断是哪个正则表达式匹配成功。

5

如果速度很重要,在决定如何编写你的生产应用程序之前,最好先进行一些测试。

首先,你提到你在搜索单词,这说明你可以使用split()函数来根据空格把字符串分开。然后再用简单的字符串比较来进行搜索。

一定要编译你的正则表达式,并进行时间测试,看看它和普通字符串函数的速度对比。你可以查阅字符串类的文档,里面有完整的函数列表。

撰写回答