9

(?P<toto>...)と同等の正規表現で定義されたシンボリックグループ名にアクセスすることは可能re.findall()ですか?

を使用するre.match()と、 re はMatchObject関数.group('toto')を使用できる a を返します...近いことをしたいと思います。

例を次に示します。

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'}]

それを行う簡単な方法はありますか?どこにも見つからない...

4

1 に答える 1

10

でそれを行うことはできません.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()

于 2012-11-27T13:34:37.830 に答える