У меня есть код приложения, который динамически генерирует регулярные выражения из конфигурации для некоторого разбора. При выполнении синхронизации двух вариаций вариация регулярного выражения причем каждая часть захваченного ИЛИ регулярного выражения заметно медленнее, чем нормальное регулярное выражение. Причина в том, что некоторые операции выполняются внутри модуля регулярных выражений.
>>> import timeit
>>> setup = '''
... import re
... '''
#no capture group
>>> print(timeit.timeit("re.search(r'hello|bye|ola|cheers','some say hello,some say bye, or ola or cheers!')", setup=setup))
0.922958850861
#with capture group
>>> print(timeit.timeit("re.search(r'(hello)|(bye)|(ola)|(cheers)','some say hello,some say bye, or ola or cheers!')", setup=setup))
1.44321084023
#no capture group
>>> print(timeit.timeit("re.search(r'hello|bye|ola|cheers','some say hello,some say bye, or ola or cheers!')", setup=setup))
0.913202047348
# capture group
>>> print(timeit.timeit("re.search(r'(hello)|(bye)|(ola)|(cheers)','some say hello,some say bye, or ola or cheers!')", setup=setup))
1.41544604301
Вопрос: Что приводит к значительному снижению производительности при использовании групп захвата?