有没有办法查看一行是否包含与一组正则表达式模式匹配的单词?
如果我有[regex1, regex2, regex3]
,并且我想查看一行是否符合其中任何一行,我该怎么做?
现在,我正在使用re.findall(regex1, line)
,但它一次只匹配1个正则表达式。
答案 0 :(得分:30)
您可以使用内置函数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])
如果正则表达式不是预编译的正则表达式对象,当然)
虽然与在单个表达式中组合正则表达式相比,这将是无效的 - 如果此代码是时间或cpu关键,您应该尝试使用特殊{{1}编写包含所有需求的单个正则表达式。 } regex运算符分隔原始表达式。 组合所有正则表达式的一种简单方法是使用字符串“join”运算符:
|
虽然如果原始表达式已经使用re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
运算符,在这个表单上组合正则表达式会导致错误的表达式。
答案 1 :(得分:2)
试试这个新的正则表达式:(regex1)|(regex2)|(regex3)。这将匹配一行中的3个正则表达式。
答案 2 :(得分:2)
你可以遍历正则表达式项目并进行搜索。
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()
答案 3 :(得分:1)
#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.