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)