9

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

使用re.match(), re 返回 a可以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)

它返回:

[('1', 'xyz'), ('15', 'abu')]

我想得到类似的东西:

[{'toto':'1', 'bip':'xyz'}, {'toto':'15', 'bip':'abu'}]

有什么简单的方法可以做到这一点吗?我到处都找不到...

4

1 回答 1

10

你不能用.findall(). 但是,您可以.finditer()使用一些列表理解魔术来实现相同的效果:

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

这打印:

[{'toto': '1', 'bip': 'xyz'}, {'toto': '15', 'bip': 'abu'}]

所以我们循环遍历产生的每个匹配项.finditer()并获取它的.groupdict()结果。

于 2012-11-27T13:34:37.830 回答