Если вы просто хотите узнать, соответствует ли какое-либо из регулярных выражений, вы можете использовать встроенную функцию any
:
if any(reg.match(name) for reg in regexes):
....
, однако это не скажет вам, какое регулярное выражение соответствует.
В качестве альтернативы вы можете объединить несколько шаблонов в одно регулярное выражение с помощью |
:
regex = re.compile(r"(regex1)|(regex2)|...")
Опять же, это не скажет вам, какое регулярное выражение соответствует, но у вас будет объект соответствия, который вы можете использовать для получения дополнительной информации.Например, вы можете узнать, кто из регулярных выражений преуспел из группы, которая не является None:
>>> match = re.match("(a)|(b)|(c)|(d)", "c")
>>> match.groups()
(None, None, 'c', None)
Однако это может усложниться, однако, если в каком-либо из под-регулярных выражений также есть группы, так какнумерация будет изменена.
Это, вероятно, быстрее, чем сопоставление каждого регулярного выражения в отдельности, поскольку механизм обработки регулярных выражений имеет больше возможностей для оптимизации регулярного выражения.