用Python匹配带有多个正则表达式的行
有没有办法检查一行文字中是否包含符合一组正则表达式的单词呢?假设我有 [regex1, regex2, regex3]
,我想知道这一行是否符合其中任何一个正则表达式,我该怎么做呢?现在,我使用 re.findall(regex1, line)
,但它一次只能匹配一个正则表达式。
4 个回答
8
你可以遍历正则表达式的项目,然后进行搜索。
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()
10
试试这个新的正则表达式: (regex1)|(regex2)|(regex3)。这个表达式会匹配包含这三种正则表达式中任意一种的行。
55
你可以使用内置的函数 any
(如果所有的正则表达式都需要匹配,可以用 all
)和生成器表达式来遍历所有的正则表达式对象。
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使用很敏感的话。你应该尝试把所有的正则表达式组合成一个单一的表达式,使用特殊的 |
操作符来分隔原来的表达式。
一种简单的组合所有正则表达式的方法是使用字符串的 join
方法:
re.match("|".join([regex_str1, regex_str2, regex_str2]), line)
需要注意的是,以这种方式组合正则表达式可能会导致错误的表达式,特别是如果原来的表达式已经使用了 |
操作符的话。