str.join
работает с строками , а не re
объектами. Присоединяйтесь , затем скомпилируйте.
regex1 = "regex1.*"
regex2 = "regex2\d"
re_dict = {regex1 : "stuff", regex2 : "otherstuff"}
match_multiple = re.compile("|".join(re_dict))
обратите внимание, что dicts не упорядочены (если вы не используете python 3.6), поэтому, если порядок выражений имеет значение, ваш код может быть неправильным
Также обратите внимание на упрощение с list(re_dict.keys())
до re_dict
, поскольку итерация по словарю дает свои ключи. Нет необходимости вызывать keys
или конвертировать в list
явно.
(ну, в любом случае, использование словаря здесь не очень полезно. Как использовать регулярное выражение в качестве ключа в будущем?)
Если у вас есть доступ только к предварительно скомпилированным выражениям, то «эмулируйте» регулярное выражение или с помощью any
if any(r.match(string) for r in re_dict):
any
коротких замыканий, поэтому он завершается с True
, как только совпадает одно регулярное выражение.
Или перестройте шаблон с помощью атрибута pattern
regex:
match_multiple = re.compile("|".join([r.pattern for r in re_dict]))