В функциях уровня модуля не нужно создавать/компилировать объект шаблона и вызывать методы скомпилированного объекта. Модуль re
определяет функции верхнего уровня, такие как match()
, search()
, findall()
, sub()
и так далее. Функции уровня модуля re
принимают одни и те же аргументы, что и соответствующий метод объекта re.compile()
, только шаблон регулярного выражения добавляется в качестве первого аргумента. Функции возвращают либо None
или экземпляр объекта Match
.
>>> print(re.match(r'From\s+', 'Fromage amk'))
# None
>>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
# <_sre.SRE_Match object; span=(0, 5), match='From '>
Функции модуля re
создают объект шаблона и вызывают соответствующий метод для него. Они также хранят скомпилированный объект в кеше, поэтому будущие вызовы с использованием одного и того же регулярного выражения не будут анализировать его снова и снова.
Если вы обращаетесь к регулярному выражению в цикле, его предварительная компиляция сохранит несколько вызовов функций. Вне циклов, нет большой разницы что лучше использовать, благодаря внутреннему кешу.