用Python匹配带有多个正则表达式的行

34 投票
4 回答
70430 浏览
提问于 2025-04-17 10:24

有没有办法检查一行文字中是否包含符合一组正则表达式的单词呢?假设我有 [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)

需要注意的是,以这种方式组合正则表达式可能会导致错误的表达式,特别是如果原来的表达式已经使用了 | 操作符的话。

撰写回答