Простейшим было бы объединить их по строкам с соответствующим синтаксисом регулярных выражений:
x = re.compile('abc')
y = re.compile('abd')
z = re.compile('(?:%s)|(?:%s)' % (x.pattern, y.pattern))
Вы также можете сделать то же самое в списке:
regexes = [
re.compile('abc'),
re.compile('abd')
]
z = re.compile('|'.join('(?:%s)' % i.pattern for i in regexes))
Примечание: это не будет учитывать параметры для re.compile
, такие как re.I
или re.M
. Вы также можете включить их и выдать ошибку, если параметры не совпадают.
def join_regexes(regexes):
patterns = []
for i, regex in enumerate(regexes):
if not i:
flags = regex.flags
elif flags != regex.flags:
raise Exception('regex flags need to match')
patterns.append(regex.pattern)
pattern = '|'.join('(?:%s)' % p for p in patterns)
return re.compile(pattern, flags)