解析这个序列的最佳方法是什么?

2024-05-14 19:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根这样的绳子

EXAMPLE{TEST;ANOTHER{PART1;PART2};UNLIMITED{POSSIBILITIES{LIKE;THIS}}}

必须得到这样的结果

EXAMPLETEST
EXAMPLEANOTHERPART1
EXAMPLEANOTHERPART2
EXAMPLEUNLIMITEDPOSSIBILITIESLIKE
EXAMPLEUNLIMITEDPOSSIBILITIESTHIS

因为嵌套的数量可能是无限的,所以我很难记住以前的部分。你能给我指一下正确的方向吗

非常感谢


Tags: testexampleanotherthislikepart2part1绳子
1条回答
网友
1楼 · 发布于 2024-05-14 19:17:57

目标:把它变成一个dict,然后从字典中创建输出

>>> string = "EXAMPLE{TEST;ANOTHER{PART1;PART2};UNLIMITED{POSSIBILITIES{LIKE;THIS}}}"
>>> string = string.replace(";", ",").replace("{", ": {")
>>> string
'EXAMPLE: {TEST,ANOTHER: {PART1,PART2},UNLIMITED: {POSSIBILITIES: {LIKE,THIS}}}'

EXAMPLETESTANOTHER是字符串,但它们没有用引号""''包装

使用RegEx解决此问题:

>>> import re
>>> string = re.sub(r"(\w+)", r"'\1'", string)
>>> string
"'EXAMPLE': {'TEST','ANOTHER': {'PART1','PART2'},'UNLIMITED': {'POSSIBILITIES': {'LIKE','THIS'}}}"

这仍然不是有效的文件格式。它不是JSON。它不是dict,而是Python中dict和set的混合体。
让它看起来更像一本字典:

>>> string = re.sub(r"'(\w+)',", r"'\1': None, ", string)
>>> string = re.sub(r"'(\w+)'}", r"'\1': None}", string)
>>> string
"'EXAMPLE': {'TEST': None, 'ANOTHER': {'PART1': None, 'PART2': None},'UNLIMITED': {'POSSIBILITIES': {'LIKE': None, 'THIS': None}}}"

现在将其转换为Python对象:

>>> my_dict = eval('{' + string + '}')
>>> my_dict
{'EXAMPLE': {'TEST': None, 'ANOTHER': {'PART1': None, 'PART2': None}, 'UNLIMITED': {'POSSIBILITIES': {'LIKE': None, 'THIS': None}}}}

现在您有了一个常规的Python对象,可以对其进行迭代并进行字符串操作。您可以编写一个连接字符串的递归函数:

>>> def create_output(dict_element, result):
...     if dict_element == None:
...         print(result)
...         return
...     for key, value in dict_element.items():
...         create_output(value, result + key)
...
>>> create_output(my_dict, "")
EXAMPLETEST
EXAMPLEANOTHERPART1
EXAMPLEANOTHERPART2
EXAMPLEUNLIMITEDPOSSIBILITIESLIKE
EXAMPLEUNLIMITEDPOSSIBILITIESTHIS

相关问题 更多 >

    热门问题