Скорость регулярного выражения Python — жадный против нежадного

Я делаю несколько замен регулярных выражений в Python по строкам

  \w\s+\w  

над многими большими документами. Очевидно, что если я сделаю регулярное выражение нежадным (с ?), оно не изменит то, что ему соответствует (как \w != \s), но ускорит ли это выполнение кода? Другими словами, с нежадными регулярными выражениями Python работает от первого совпадающего символа, а не от конца документа обратно к этому символу, или это наивный взгляд?


person Barry    schedule 30.11.2012    source источник
comment
Измерьте это. Скорее всего нет - но меряйте.   -  person Emil Ivanov    schedule 30.11.2012


Ответы (1)


Это та схема, которую вы имели в виду?

In [15]: s = 'some text   with \tspaces  between'

In [16]: timeit re.sub(r'(\w)(\s+)(\w)', '\\1 \\3', s)
10000 loops, best of 3: 30.5 us per loop

In [17]: timeit re.sub(r'(\w)(\s+?)(\w)', '\\1 \\3', s)
10000 loops, best of 3: 24.9 us per loop

Кажется, здесь довольно небольшая разница. Всего 5 микросекунд с нежадным,

Используя lorem-ipsum из 500 слов с несколькими смешанными пробелами между каждым словом, я получаю разницу в 8 мс.

person jdi    schedule 30.11.2012