使用Python将一行与多个正则表达式匹配

时间:2012-01-17 01:19:28

标签: python regex

有没有办法查看一行是否包含与一组正则表达式模式匹配的单词? 如果我有[regex1, regex2, regex3],并且我想查看一行是否符合其中任何一行,我该怎么做? 现在,我正在使用re.findall(regex1, line),但它一次只匹配1个正则表达式。

4 个答案:

答案 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.