Ответ 1
import re
regexes = [
"foo.*",
"bar.*",
"qu*x"
]
# Make a regex that matches if any of our regexes match.
combined = "(" + ")|(".join(regexes) + ")"
if re.match(combined, mystring):
print "Some regex matched!"
У меня есть список регулярных выражений в python и строка. Есть ли элегантный способ проверить, соответствует ли по крайней мере одно регулярное выражение в списке строке? Изящным я имею в виду что-то лучшее, чем просто перебирать все регулярные выражения и проверять их на строку и останавливать, если совпадение найдено.
В принципе, у меня был этот код:
list = ['something','another','thing','hello']
string = 'hi'
if string in list:
pass # do something
else:
pass # do something else
Теперь я хотел бы иметь некоторые регулярные выражения в списке, а не просто строки, и мне интересно, есть ли элегантное решение проверить соответствие для замены if string in list:
.
Спасибо заранее.
import re
regexes = [
"foo.*",
"bar.*",
"qu*x"
]
# Make a regex that matches if any of our regexes match.
combined = "(" + ")|(".join(regexes) + ")"
if re.match(combined, mystring):
print "Some regex matched!"
import re
regexes = [
# your regexes here
re.compile('hi'),
# re.compile(...),
# re.compile(...),
# re.compile(...),
]
mystring = 'hi'
if any(regex.match(mystring) for regex in regexes):
print 'Some regex matched!'
Смесь ответов Ned и Nosklo. Работы гарантированы для любой длины списка... надеюсь, вам понравится
import re
raw_lst = ["foo.*",
"bar.*",
"(Spam.{0,3}){1,3}"]
reg_lst = []
for raw_regex in raw_lst:
reg_lst.append(re.compile(raw_regex))
mystring = "Spam, Spam, Spam!"
if any(compiled_reg.match(mystring) for compiled_reg in reg_lst):
print("something matched")
Если вы зациклите строки, сложность по времени будет O (n). Лучшим подходом было бы объединить эти регулярные выражения в качестве регулярного выражения.