是否有类似re.findall的函数,但返回字典而不是元组?

时间:2012-03-24 00:22:20

标签: python regex

我有这个字符串:

a= "hello world hella warld"

我希望匹配正则表达式的所有巧合:

b='(?P<hel>hell[oa])\s*(?P<wrl>w[oa]rld)'

我可以使用re.findall(b,a)并获取:

[('hello', 'world'),('hella','warld')]

但我真的想得到:

[{'hel':'hello','wrl':'world'},{'hel':'hella','wrl':'warld'}]

Mi queston是否有一些原生或简单的方法可以在Python中获得这个?

第二个问题:

我写了一个函数来获取字典:

def findalldict(regex,line):
    matches = []
    match = 1
    c = line
    while match != None and len(c)>1:
        match =re.search(regex,c)
        if match:
            matches.append(match.groupdict())
            c =c[match.end():]
    return matches

但我不确定它是否正确,你们有没有看到任何错误?或者你知道一个更好的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:7)

您可以使用finditer代替findall来获取MatchObject s的迭代器:

>>> regex = re.compile('(?P<hel>hell[oa])\s*(?P<wrl>w[oa]rld)')
>>> line = "hello world hella warld"
>>> [m.groupdict() for m in regex.finditer(line)]
[{'hel': 'hello', 'wrl': 'world'}, {'hel': 'hella', 'wrl': 'warld'}]