【发布时间】:2020-11-15 14:54:40
【问题描述】:
我不得不承认,我的正则表达式质量相当差,我(在这种情况下)通过其他解决方案来避免它们。但是,在这种情况下,为了稳定和清洁,我真的很想有一个解决方案。 输入文件如下:
MAIN: name
attr1: str
attr2: str
attr3: str
SUB: name
attr1: str
attr2: str
attr3: str
MAIN: name
attr1: str
attr2: str
SUB: name
attr1: str
attr2: str
SUB: name
attr1: str
SUB: name
attr1: str
attr2: str
attr3: str
条目总是以不缩进的MAIN 开头,后跟collon 和name。
以下是1 to N 缩进键值对。
然后是0 to N 未缩进的条目,SUB:name,再后面是缩进的属性。
每个条目之间有一个空行(无论MAIN 或SUB。
Output 应如下所示
output = {main_name:
{
'attr1': str,
'attr2': str,
...
'subs': [
{
'name': sub_name,
'attr1': str,
...
},
{...}
]
}
main_name2:
{
...
}
}
我目前的做法是这样的:
entries = input.split('\n\n')
entries = [entry.replace(" ","").split("\n") for entry in entries]
entries = [attribute.split(":") for entry in entries for attribute in entry]
然后遍历包含大量 if 和 else 的项目以生成所描述的键值结构。
有人可以提示我一种优雅的方式来处理这种结构,实际上它定义得很好并且应该可以处理:)
干杯,谢谢大家!
【问题讨论】: