我的输入字符串是:
{(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')]
似乎有不必要的最外层
(
)
括号和+
。我不确定您的正则表达式的要求和其他输入情况,但在这种情况下,此正则表达式将生成您想要的:>>> metric_matches = re.findall('\[\((\w+)\)\((\w+)\)\((\d+)\)\]', metrics_line)
>>> [('mapper_init', 'mapper_init', '1'), ('mapper_input_lines', 'mapper_input_lines', '102571')]
如果tuple中的第一个值不重要,则可以忽略它,如下所示:
>>> metric_matches = re.findall('\[\(\w+\)\((\w+)\)\((\d+)\)\]', metrics_line)
>>> [('mapper_init', '1'), ('mapper_input_lines', '102571')]
以下是解决方法(我在上一个中有输入错误):
结果将是:
正如您可以看到的,括号保留在那里,但是
+
被删除了。你知道吗相关问题 更多 >
编程相关推荐