文字列内のネストされた括弧のマッチングは、特に正規表現 (正規表現) を使用する場合、困難な作業になる可能性があります。次の Python コードを考えてみましょう:
<code class="python">import re p = re.compile('\(.+\)') str = '(((1+0)+1)+1)' print(p.findall(str))</code>
このコードは、単一の正規表現パターンを使用して、変数 str 内のすべての数式のような文字列との一致を試みます。ただし、ネストされた個々の括弧を識別することが目的であっても、式全体が全体として一致するだけです。
正規表現パターンは、ネストされた構造を処理する能力に制限があります。効果的に。式 (. ) は括弧で囲まれた任意の文字列と一致しますが、異なるネスト レベルを区別することはできません。その結果、最も外側の括弧内のすべてがグループ化され、内側の括弧は無視されます。
正規表現の制限を克服するには、pyparsing と呼ばれるより高度なライブラリを活用できます。 、複雑な文字列パターンを処理するための特殊なパーサーを提供します。 pyparsing を使用した例を次に示します。
<code class="python">import pyparsing thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-' parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>
このコードは、個々の文字または算術演算子を表す thecontent と、ネストされたかっこ構造を定義する parens の 2 つの要素を定義します。
このソリューションを例で示してみましょう:
<code class="python">res = parens.parseString("((12 + 2) + 3)") print(res.asList())</code>
[[['12', '+', '2'], '+', '3']]
ネストされた括弧の一致に pyparsing を使用すると、いくつかの利点があります。正規表現上:
正規表現は単純な文字列の一致には役立ちますが、括弧のようなネストされた構造を処理するのは困難です。このようなシナリオでは、pyparsing などの特殊な解析ライブラリが堅牢かつ柔軟な代替手段を提供し、正確で意味のある一致結果を保証します。
以上が正規表現は入れ子になった括弧を処理できますか?制限事項と pyparsing ソリューションの調査。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。