如何使用 re.findall() 使用符号组名
Posted
技术标签:
【中文标题】如何使用 re.findall() 使用符号组名【英文标题】:How to use symbolic group name using re.findall() 【发布时间】:2012-11-15 03:20:21 【问题描述】:是否可以使用(?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)
它返回:
[('1', 'xyz'), ('15', 'abu')]
我想得到类似的东西:
['toto':'1', 'bip':'xyz', 'toto':'15', 'bip':'abu']
有什么简单的方法吗? 我在任何地方都找不到它......
【问题讨论】:
【参考方案1】:.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()
结果。
【讨论】:
谢谢!它工作得很好,我什至可以直接用它来循环迭代器!以上是关于如何使用 re.findall() 使用符号组名的主要内容,如果未能解决你的问题,请参考以下文章