Python正则表达式不匹配多个组

时间:2014-04-10 10:23:22

标签: python regex

我的输入字符串是:

{(metrics)(metrics)[(mapper_init)(mapper_init)(1)][(mapper_input_lines)(mapper_input_lines)(102571)]}

当我运行以下代码时:

metric_matches = re.findall('(\[\(\w+\)\((\w+)\)\((\d+)\)\])+', metrics_line)

print "Processing: %s" % metrics_line
print metric_matches

我明白了:

Processing: {(metrics)(metrics)[(mapper_init)(mapper_init)(1)][(mapper_input_lines)(mapper_input_lines)(102571)]}
[('[(mapper_input_lines)(mapper_input_lines)(102571)]', 'mapper_input_lines', '102571')]

为什么不匹配两个组?我想让它匹配:

[(__not-important__, 'mapper_init', 1), (__not-important__, 'mapper_input_lines', '102571')]

2 个答案:

答案 0 :(得分:0)

这里的解决方案(我之前的错误):

metric_matches = re.findall(r'\[\((\w+)\)\((\w+)\)\((\d+)\)\]', metrics_line)

结果将是:

[('mapper_init', 'mapper_init', '1'), ('mapper_input_lines', 'mapper_input_lines', '102571')]

正如您所见,括号留在那里,但+已删除。

答案 1 :(得分:0)

似乎有不必要的最外( )括号和+。我不确定你的正则表达式的要求和其他输入案例,但是这个正则表达式会在这种情况下产生你想要的东西:

>>> metric_matches = re.findall('\[\((\w+)\)\((\w+)\)\((\d+)\)\]', metrics_line)

>>> [('mapper_init', 'mapper_init', '1'), ('mapper_input_lines', 'mapper_input_lines', '102571')]

如果元组中的第一个值不重要,那么您可以忽略它:

>>> metric_matches = re.findall('\[\(\w+\)\((\w+)\)\((\d+)\)\]', metrics_line)

>>> [('mapper_init', '1'), ('mapper_input_lines', '102571')]