このシーケンスを解析するための最良の方法?

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

EXAMPLETESTANOTHER文字列であるが、それらは引用符で包まれていません""''

この問題を解決するために正規表現を使用しました:

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

これはまだ有効なファイル形式ではありません。それはJSONではありません。それは辞書ではありません。これは、辞書の混合物とPythonで設定します。
それはより多くの辞書のように見えるように:

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=298332&siteId=1