0

このデータに基づいて辞書を作成したい:

入力

1234STUD

出力

{'student': {'id': '1234', 'name': 'STUD'}}

ここで私は正規表現で何をしますか:

import re
rule = '(?P<student>((?P<id>\d{4})(?P<name>\w{4})))'
text = '1234STUD'
m = re.search(rule, text)
m.groupdict()

そして、現在の出力の場合私が望んでいたものではありません):

{'id': '1234', 'name': 'STUD', 'student': '1234STUD'}

上記で必要な出力を得るために何をすべきか誰にもアドバイスできますか?

ノート:

これは私のプロジェクトの単なる例です。データはこれよりも複雑です。そのため、上記の方法で ( を使用して)何か方法があれば、必要なm.groupdict()ものが生成されますか?

4

2 に答える 2

2

正規表現のみでネストされた辞書を作成することはできません。ネストされた構造を作成するには、データを後処理する必要があります。

import re
rule = '(?P<id>\d{4})(?P<name>\w{4})'
text = '1234STUD'
m = re.search(rule, text)
result = {'student': m.groupdict()}
于 2013-02-18T07:53:21.877 に答える
1

必要なdictを作成して返す関数を作成する必要があります。これは、速度を上げるために、事前にコンパイルされた正規表現パターンを使用する必要があります。

import re

_pat_student_parser = re.compile(r'((?P<id>\d{4})(?P<name>\w{4}))')

def nested_dict_from_text(text):
    m = re.search(_pat_student_parser, text)
    if not m:
        raise ValueError
    d = m.groupdict()
    return { "student": d }

result = nested_dict_from_text('1234STUD')
print(result)
于 2013-02-18T07:58:08.997 に答える