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 回答