在 vs re.search Python
我有一个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
不过,如果你的程序运行了几个小时,我怀疑问题的根源会出现在这些地方。