Есть ли возможность проверять строку на соответствие нескольким шаблонам?
ExcTC = re.search(r'([TKA]C_)(\S+)(.*)(TS)(.*)(C_TC)', line)
но есть еще 2 шаблона, их как-то можно объединить в одной переменной?
Есть ли возможность проверять строку на соответствие нескольким шаблонам?
ExcTC = re.search(r'([TKA]C_)(\S+)(.*)(TS)(.*)(C_TC)', line)
но есть еще 2 шаблона, их как-то можно объединить в одной переменной?
Если у вас есть два регулярных выражения A и B, то объединённый regex будет:
A|B
который проверяется слева направо.
Если A=C|D, то результат:
C|D|B
Чтобы помнить, что в задаче C|D были одним регулярным выражением, можно их в группу объединить:
(?:C|D)|B
В общем случае, наличие группы может менять смысл выражения. К примеру, a|bc и (?:a|b)c (второе срабатывает для ac).
Если у вас есть список регулярных выражений:
patterns = [A, B, C, D, E, F, G, ...]
то можно объединить их, используя str.join, оборачивая каждое выражение в свою группу с помощью map и str.format:
combined = '|'.join(map('(?:{})'.format, patterns))
Проверить текст на наличие неограниченного количества шаблонов в нем можно следующим образом. Данный способ позволит также определить, какой из шаблонов сработал.
import re
text = "one two three four five"
patterns = ['one', 'two']
for pattern in patterns:
find = re.search(pattern, text)
if find:
print('Found "{}" in "{}"'.format(pattern, text))
else:
print('Did not find "{}"'.format(pattern))
'(?P<x>A)|(?P<y>B)' -- лучше как отдельный Stack Overflow вопрос спросить¶ Если вы фиксированные строки ищите (не общие регулярные выражения), то есть более эффективные алгоритмы: Поиск повторяющихся строк
– jfs
Mar 29 '18 at 08:26
|- но тогда не всегда будет понятно какой из сработал. – nick_n_a Mar 27 '18 at 07:15text = 'This text includes pattern1 and pattern2'
for pattern in patterns:
find = re.search(pattern, text)
print(find) – Трофим Воробьев Mar 28 '18 at 07:59