これは、外側の括弧に一致する正規表現に非常に関連していますが、この正規表現の再帰パターンを実行する方法または可能性があるかどうかを具体的に知りたいですか? この戦略を使用した python の例をまだ見つけていないので、これは役に立つ質問だと思います!
再帰パターンを使用してバランスの取れた括弧を一致させることができるという主張を見 て きましたが、python の正規表現パッケージを使用した例はありません(注: reは再帰パターンをサポートしていないため、正規表現を使用する必要があります)。
1つの主張は、構文がb(?:m|(?R))*e
どこにあるということです:
b
は構成の始まり、 は構成m
の途中で発生する可能性があるe
もの、 は構成の最後で発生する可能性があるものです。
次の外括弧の一致を抽出したい:
"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"] # desired
内側のブレースについても同じことが簡単にできることに注意してください。
re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']
(私の例では、finditer (マッチ オブジェクトに対して) を使用していました。こちらを参照してください。)
したがって、次の、またはいくつかのバリエーションが機能することを期待していました。
regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}])|(?R)})", "{1, {2, 3}} {4, 5}")
しかし、私は [] またはerror: too much backtracking
.
正規表現の再帰を使用して、外括弧の一致オブジェクトを抽出することは可能ですか?
明らかに、私は撃墜される危険があります:
- 正規表現でhtmlを解析しないでください
- pyparseでこれを行います
- ply などを使用して適切なレクサーとパーサーを作成する
これは、再帰パターンの使用方法に関するものであることを強調したいと思います(私の理解が正しければ、通常の言語解析の範囲外になるため、実際に可能になる可能性があります!)。それができれば、これはよりクリーンなソリューションになるはずです。