如何使用 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() 使用符号组名的主要内容,如果未能解决你的问题,请参考以下文章

python正则表达式 ---- re模块

python(re模块)

在 python re.findall 中使用多个标志

TypeError:不能在 re.findall() 中的类似字节的对象上使用字符串模式

Python re.findall 打印所有模式

除了所有输入数据之外,将 re.findall() 输出到 CSV