Сопоставить строку с несколькими регулярными выражениями с использованием Python
Есть ли способ узнать, содержит ли строка слова, которые соответствуют набору регулярных выражений? Если у меня есть [regex1, regex2, regex3]
и я хочу посмотреть, соответствует ли строка какой-либо из них, как бы я это сделал? Щас пользуюсь re.findall(regex1, line)
, но это соответствует только одному регулярному выражению за раз.
3 ответа
Вы можете использовать встроенные функции any
(или же all
если все регулярные выражения должны совпадать) и выражение Generator для прохождения через все регулярные выражения.
any (regex.match(line) for regex in [regex1, regex2, regex3])
(или же any(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2])
если регулярные выражения не являются предварительно скомпилированными объектами регулярных выражений, конечно)
Хотя это будет неэффективно по сравнению с объединением ваших регулярных выражений в одном выражении - если этот код критичен по времени или процессору, вам следует вместо этого попытаться составить одно регулярное выражение, которое охватывает все ваши потребности, используя специальные |
оператор регулярного выражения для разделения исходных выражений. Простой способ объединить все регулярные выражения - использовать оператор строки "join":
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
Хотя объединение регулярных выражений в этой форме может привести к неправильным выражениям, если оригинальные уже используют |
оператор.
Попробуйте это новое регулярное выражение: (regex1)|(regex2)|(regex3). Это будет соответствовать строке с любым из трех регулярных выражений в нем.
Вы можете просмотреть элементы регулярных выражений и выполнить поиск.
regexList = [regex1, regex2, regex3]
line = 'line of data'
gotMatch = False
for regex in regexList:
s = re.search(regex,line)
if s:
gotMatch = True
break
if gotMatch:
doSomething()
#quite new to python but had the same problem. made this to find all with multiple
#regular #expressions.
regex1 = r"your regex here"
regex2 = r"your regex here"
regex3 = r"your regex here"
regexList = [regex1, regex1, regex3]
for x in regexList:
if re.findall(x, your string):
some_list = re.findall(x, your string)
for y in some_list:
found_regex_list.append(y)#make a list to add them to.