如何使用re.findall()使用符号组名

Tho*_*ard 8 python regex match findall

是否可以(?P<toto>...)使用等效的re.findall()?访问正则表达式中定义的符号组名称?

使用re.match(),重新返回一个可以使用MatchObject该功能的.group('toto')...我想做一些接近的事情.

这是一个例子:

import re
my_str = 'toto=1, bip=xyz, toto=15, bip=abu'
print re.findall('toto=(?P<toto>\d+)\,\sbip=(?P<bip>\w+)', my_str)
Run Code Online (Sandbox Code Playgroud)

它返回:

[('1', 'xyz'), ('15', 'abu')]
Run Code Online (Sandbox Code Playgroud)

我想得到类似的东西:

[{'toto':'1', 'bip':'xyz'}, {'toto':'15', 'bip':'abu'}]
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法呢?我在任何地方找不到它......

Mar*_*ers 9

你不能这样做.findall().但是,你可以.finditer()一些列表理解魔法达到同样的效果:

print [m.groupdict() for m in re.finditer('toto=(?P<toto>\d+)\,\sbip=(?P<bip>\w+)', my_str)]
Run Code Online (Sandbox Code Playgroud)

这打印:

[{'toto': '1', 'bip': 'xyz'}, {'toto': '15', 'bip': 'abu'}]
Run Code Online (Sandbox Code Playgroud)

所以我们遍历每个匹配产生的匹配.finditer()并得到它的.groupdict()结果.