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