2

次のように Python で文字列を定義するとします。

my_string = "something{name1, name2, opt1=2, opt2=text}, something_else{name3, opt1=58}"

言語のさまざまな構造にインデックスを付けることができるように、Python でその文字列を解析したいと思います。

たとえば、出力は parsing_result、構造化された方法でさまざまな要素にインデックスを付けることができる辞書になる可能性があります。

たとえば、次のようになります。

parsing_result['names'] 

文字列の a を保持しlistます:['name1', 'name2']

一方、parsing_result['options'] 次のように辞書を保持します。

  • parsing_result['something']['options']['opt2']文字列を保持します"text"
  • parsing_result['something_else']['options']['opt1']文字列を保持します"58"

私の最初の質問は、Python でこの問題にどのようにアプローチすればよいかということです。このタスクを簡素化するライブラリはありますか?

実際の例として、上記で定義した正確な構文を解析するソリューションに必ずしも関心があるわけではありませんが (それは素晴らしいことですが)、それに近いものは何でも素晴らしいでしょう。

アップデート

  1. 一般的な正しい解決策は、パーサーとplyなどのレクサーを使用しているように見えますが (@Joran に感謝します)、ドキュメントは少し威圧的です。構文が軽量の場合、これを行う簡単な方法はありますか?

  2. 外側のコンマで文字列を分割するために、次の正規表現が提供されているこのスレッドを見つけました。

    r = re.compile(r'(?:[^,(]|\([^)]*\))+')
    r.findall(s)
    

    ただし、これは、グループ化文字が()(でなく{}) であることを前提としています。これを適応させようとしていますが、簡単には見えません。

4

3 に答える 3