Pythonドキュメントからre.compile()
:
注re.match()、re.search()、またはre.compile()に渡された最新のパターンのコンパイル済みバージョンはキャッシュされるため、一度に少数の正規表現のみを使用するプログラムは、正規表現のコンパイルについて心配する必要はありません。式。
しかし、私のテストでは、この主張は持ちこたえられていないようです。同じパターンを繰り返し使用する次のスニペットのタイミングをとる場合、コンパイルされたバージョンは、コンパイルされていないバージョン(おそらくキャッシュされているはずです)よりも大幅に高速です。
時差を説明する何かがここに欠けていますか?
import timeit
setup = """
import re
pattern = "p.a.t.t.e.r.n"
target = "p1a2t3t4e5r6n"
r = re.compile(pattern)
"""
print "compiled:", \
min(timeit.Timer("r.search(target)", setup).repeat(3, 5000000))
print "uncompiled:", \
min(timeit.Timer("re.search(pattern, target)", setup).repeat(3, 5000000))
結果:
compiled: 2.26673030059
uncompiled: 6.15612802627