在vs re.search python中

时间:2014-07-02 06:59:17

标签: python regex

我有一个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...

1 个答案:

答案 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

但如果你的程序运行了几个小时,我怀疑问题的根源在于这些领域。