Я попытался сравнить 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
Теперь я знаю, что match ищет шаблон в начале строки и возвращает объект, если он найден, но мне интересно, как работает поиск.
Выполняет ли поиск любое дополнительное соответствие после того, как строка найдена в начале, которая замедляет ее?
Обновление
После использования кода @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
?