re.match
モジュールをre.search
使用して比較しようとしたtimeit
ところ、見つけたい文字列が文字列の先頭にある場合、検索よりも一致が優れていることがわかりました。
>>> s1 = '''
... import re
... re.search(r'hello','helloab'*100000)
... '''
>>> timeit.timeit(stmt=s1,number=10000)
32.12064480781555
>>> s = '''
... import re
... re.match(r'hello','helloab'*100000)
... '''
>>> timeit.timeit(stmt=s,number=10000)
30.9136700630188
今、私は一致が文字列の先頭にあるパターンを探し、見つかった場合はオブジェクトを返すことを認識していますが、検索がどのように機能するのか疑問に思っています。
文字列が最初に見つかった後、検索は余分なマッチングを実行し、速度が低下しますか?
アップデート
@David Robinsons コードを使用した後、彼と同様の結果が得られました。
>>> print timeit.timeit(stmt="r.match('hello')",
... setup="import re; s = 'helloab'*100000; r = re.compile('hello')",
... number = 10000000)
49.9567620754
>>> print timeit.timeit(stmt="r.search('hello')",
... setup="import re; s = 'helloab'*100000; r = re.compile('hello')",
... number = 10000000)
35.6694438457
それで、更新された質問は、なぜsearch
パフォーマンスが優れているのmatch
かということです。