条件语句中的Python正则表达式匹配

pyt*_*hor 23 python regex conditional

我正在解析文件,我想检查每一行与几个复杂的正则表达式.像这样的东西

if re.match(regex1, line): do stuff
elif re.match(regex2, line): do other stuff
elif re.match(regex3, line): do still more stuff
...
Run Code Online (Sandbox Code Playgroud)

当然,为了做这些事情,我需要匹配对象.我只能想到三种可能性,每种可能性都有所不足.

if re.match(regex1, line): 
    m = re.match(regex1, line)
    do stuff
elif re.match(regex2, line):
    m = re.match(regex2, line)
    do other stuff
...
Run Code Online (Sandbox Code Playgroud)

这需要进行两次复杂的匹配(这些是长文件和长正则表达式:/)

m = re.match(regex1, line)
if m: do stuff
else:
    m = re.match(regex2, line)
    if m: do other stuff
    else:
       ...
Run Code Online (Sandbox Code Playgroud)

随着我进一步缩进,这变得非常糟糕.

while True:
    m = re.match(regex1, line)
    if m:
        do stuff
        break
    m = re.match(regex2, line)
    if m:
        do other stuff
        break
    ...
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪.

这样做的正确方法是什么?

Tim*_*ker 15

您可以为每个正则表达式所需的操作定义一个函数,并执行类似的操作

def dostuff():
    stuff

def dootherstuff():
    otherstuff

def doevenmorestuff():
    evenmorestuff

actions = ((regex1, dostuff), (regex2, dootherstuff), (regex3, doevenmorestuff))

for regex, action in actions:
    m = re.match(regex, line)
    if m: 
        action()
        break
Run Code Online (Sandbox Code Playgroud)