重複の可能性:
Python でネストされた構造を正規表現と照合する
この問題に頭を悩ませることはできません。次のような文字列があります。
Lorem ipsum dolor sit amet [@a xxx yyy [@b xxx yyy [@c xxx yyy]]] lorem ipsum sit amet
私の仕事は、コマンド (常に[@で始まり、]で終わる) とそのサブコマンドを抽出することです。みたいな結果
[
[@a xxx yyy [@b xxx yyy [@c xxx yyy]]], # the most outer
[@b xxx yyy [@c xxx yyy]], # the middle one
[@c xxx yyy] # the inner most
]
高く評価されます。問題は、これらの種類のコマンドが非常に長いテキスト メッセージで発生する可能性があることです。そのため、「パフォーマンスの高い」ソリューションが適しています。
私はほとんどの場合、いくつかの正規表現パターンをいじっていました
(\[@.*?\]\s) # for the outer one
しかし、私は真ん中と内側のものに一致する光を見たことがありません. さらに複雑にするために、ネストされたコマンドの量は可変です...特別な正規表現が解決策になるのでしょうか? 先読みと後読みについて読みましたが、この特別なケースでそれらを使用する方法がわかりません。
たくさんありがとう!
アップデート
@ Cyborgx37 は、pyparsing パッケージを使用する別の投稿を教えてくれました。外部パッケージやライブラリを使用しないソリューションがあればいいのにと思います。しかし、パイパーシングは間違いなくその問題を解決します!