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)
有没有简单的方法呢?我在任何地方找不到它......
你不能这样做.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()结果.