如果您想知道在编译正则表达式模式时它的速度如何,您需要对其进行基准测试。
这是我的做法。每个模式编译 100 万次。
import time,re
def taken(f):
def wrap(*arg):
t1,r,t2=time.time(),f(*arg),time.time()
print t2-t1,"s taken"
return r
return wrap
@taken
def regex_compile_test(x):
for i in range(1000000):
re.compile(x)
print "for",x,
#sample tests
regex_compile_test("a")
regex_compile_test("[a-z]")
regex_compile_test("[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}")
我的计算机中的每个模式大约需要 5 分钟。
for a 4.88999986649 s taken
for [a-z] 4.70300006866 s taken
for [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4} 4.78200006485 s taken
真正的瓶颈不在于编译模式,它在于提取像 re.findall 这样的文本,替换 re.sub。如果你对几个 MB 文本使用它,它会很慢。
如果您的文本是固定的,请使用普通的 str.find,它比正则表达式更快。
实际上,如果您提供文本示例和正则表达式模式示例,我们可以为您提供更好的想法,那里有很多很棒的正则表达式和 python 专家。
希望对您有所帮助,如果我的回答对您没有帮助,请见谅。