re.findall返回命名捕获组的字典?

bee*_*jay 47 python regex

受到现在删除的问题的启发; 给定一个带有命名组的正则表达式,是否有一个方法findall可以返回一个dict包含命名捕获组而不是列表的列表tuple

鉴于:

>>> import re
>>> text = "bob sue jon richard harry"
>>> pat = re.compile('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)')
>>> pat.findall(text)
[('bob', 'sue'), ('jon', 'richard')]
Run Code Online (Sandbox Code Playgroud)

应该给:

[{'name': 'bob', 'name2': 'sue'}, {'name': 'jon', 'name2': 'richard'}]
Run Code Online (Sandbox Code Playgroud)

Nol*_*lty 97

>>> import re
>>> s = "bob sue jon richard harry"
>>> r = re.compile('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)')
>>> [m.groupdict() for m in r.finditer(s)]
[{'name2': 'sue', 'name': 'bob'}, {'name2': 'richard', 'name': 'jon'}]
Run Code Online (Sandbox Code Playgroud)

  • 这是一个比我的版本更好的解决方案,它专注于从一开始就使用 `findall`。 (2认同)

iru*_*var 9

你可以切换到发现者

>>> import re
>>> text = "bob sue jon richard harry"
>>> pat = re.compile('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)')
>>> for m in pat.finditer(text):
...     print m.groupdict()
... 
{'name2': 'sue', 'name': 'bob'}
{'name2': 'richard', 'name': 'jon'}
Run Code Online (Sandbox Code Playgroud)


Luc*_*s B 6

如果您使用match:

r = re.match('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)', text)
r.groupdict()
Run Code Online (Sandbox Code Playgroud)

这里的文件