이 순서를 구문 분석하는 가장 좋은 방법은?

TheInovat :

나는이 같은 문자열을 얻을

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

이 같은 결과를 얻을 수 있습니다

EXAMPLETEST
EXAMPLEANOTHERPART1
EXAMPLEANOTHERPART2
EXAMPLEUNLIMITEDPOSSIBILITIESLIKE
EXAMPLEUNLIMITEDPOSSIBILITIESTHIS

중첩의 무제한이있을 수 있기 때문에, 내가 전에 부품을 기억하는 문제에 봉착했습니다. 당신은 아마 올바른 방향으로 날 지점 수 있을까요?

감사합니다 많이합니다

틴 구엔 :

목표 : 사전인가로 돌립니다. 그리고 사전에서 출력을 생성합니다.

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

EXAMPLE, TEST, ANOTHER문자열하지만 따옴표로 싸여 있지 ""''.

정규식을 사용하여이 문제를 해결하기 위해 :

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

이것은 여전히 유효한 파일 형식이 아닙니다. 그것은 JSON 아니다. 그것은 DICT 아니다. 그것은 딕셔너리의 혼합물과 파이썬의 집합입니다.
더 사전처럼 보이게 만들기 :

>>> 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}}}"

이제 파이썬 객체로 돌려 :

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

지금 당신은 당신을 통해 반복하고 문자열 조작을 할 수있는 일반 파이썬 객체를 가지고있다. 당신은 당신의 문자열을 연결 재귀 함수를 작성할 수 있습니다 :

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

추천

출처http://43.154.161.224:23101/article/api/json?id=298330&siteId=1