当有多个正则表达式模式进行测试时,如何以Pythonic方式编写,如果测试成功,则如何提取匹配的组?
也就是说,Pythonic等效于以下代码片段是什么?
if re.match(pattern1, string):
m = re.match(pattern1, string)
grps = m.groups()
...[process matched groups for pattern1]...
elif re.match(pattern2, string):
m = re.match(pattern2, string)
grps = m.groups()
...[process matched groups for pattern2]...
elif re.match(pattern3, string):
m = re.match(pattern3, string)
grps = m.groups()
...[process matched groups for pattern3]...
答案 0 :(得分:3)
patterns = [pattern1, pattern2, pattern3]
for pattern in patterns:
m = re.match(pattern, string)
if m:
grps = m.groups()
...
break
答案 1 :(得分:0)
为处理结果组的每个模式创建一个函数。然后你可以使用列表理解:
lst = [(pattern1, func1), (p2, f2)...]
results = [func(match.groups()) for (match, func) in [(re.match(patt, theStr), func) for (patt, func) in lst] if match]
答案 2 :(得分:0)
基本上我想要的是:
m = re.match(pattern1, string)
if m:
grps = m.groups()
print(pattern1)
else:
m = re.match(pattern2, string)
if m:
grps = m.groups()
print(pattern2)
这是我找到的最好的风格,它模仿了许多语言中存在的case
语句:
while True:
m = re.match(pattern1, string)
if m:
grps = m.groups()
print(pattern1)
break
m = re.match(pattern2, string)
if m:
grps = m.groups()
print(pattern2)
break
不确定我是Python中case
的发明者。但是从文本中我们可以看到第二个具有恒定缩进,而第一个具有线性缩进。算法教授告诉我们O(1)
优于O(n)
。