在 vs re.search Python

5 投票
1 回答
2006 浏览
提问于 2025-04-18 11:50

我有一个Python 2.7的脚本,通常需要运行几个小时,现在我想优化一下。这个脚本里面有很多字符串搜索,这部分的计算量比较大。目前我使用的是re.search('stringToFind', haystack)来在较长的字符串中查找子字符串。我在考虑把所有不需要用到正则表达式的地方重写,改用in来查找。几乎所有被搜索的字符串都是普通字符串,也就是不包含正则表达式。

我知道in是通过一个contains方法来检查子字符串的,但我对re.search是怎么处理非正则字符串的就不太清楚了。re.search到底是怎么工作的呢?用in来替代re.search在字符串比较中真的会更高效吗?

补充说明:我可以给出一个当前运行的代码示例:

if re.search('extern', variable):
    # Do something...

可以替换为:

if 'extern' in variable:
    # Do  something...

1 个回答

5

正如其他人所说,使用正则表达式进行搜索本身比简单的子字符串搜索要复杂得多。这里有一个非常粗略的基准测试:

import timeit
import re
s = '0' * 1000 + 'foo' + '0' * 1000
rgx = re.compile(r'foo')
setup = 'from __main__ import s, rgx'
print timeit.timeit('"foo" in s', setup = setup)             # 0.745168924332
print timeit.timeit('rgx.search(s).group(0)', setup = setup) # 1.14249396324

不过,如果你的程序运行了几个小时,我怀疑问题的根源会出现在这些地方。

撰写回答