我有一个python 2.7脚本,通常运行几个小时,我现在正在尝试优化它。它有很多字符串搜索,代表了计算的重要部分。目前我正在使用re.search('stringToFind', haystack)
来查找更长字符串中的子字符串。我正在考虑重写所有不包含正则表达式的表达式,而是使用in
。几乎所有搜索的字符串都是普通字符串,即不包含正则表达式。
我知道in
使用contains
方法来检查子字符串,但我不知道re.search如何用于非re的字符串。 re.search如何实际运作?在字符串比较中使用而不是re.search for substring真的会更有效吗?
编辑:为了澄清我可以举例说明当前正在运行的代码:
if re.search('extern', variable):
# Do something...
可以替换为:
if 'extern' in variable:
# Do something...
答案 0 :(得分:2)
正如其他人所评论的那样,执行正则表达式搜索本质上比简单子字符串搜索更复杂。这是一个非常粗略的基准:
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
但如果你的程序运行了几个小时,我怀疑问题的根源在于这些领域。