ホームページ >バックエンド開発 >Python チュートリアル >正規表現と pyparsing を使用して、Python でネストされた括弧を効果的に抽出するにはどうすればよいでしょうか?

正規表現と pyparsing を使用して、Python でネストされた括弧を効果的に抽出するにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 11:47:29414ブラウズ

How can you effectively extract nested parentheses in Python using regular expressions and pyparsing?

正規表現を使用した Python での入れ子括弧の抽出

Python では、正規表現を使用して入れ子括弧を抽出するのが難しい場合があります。一般的なアプローチは、提供されたコード スニペットに示されているように、 re.compile() メソッドを使用することです。ただし、複雑なネストされた構造を処理する場合、この方法では常に望ましい結果が得られるとは限りません。

ネストされた括弧が含まれる状況では、pyparsing ライブラリを使用した代替アプローチにより柔軟性が高まります。 Pyparsing を使用すると、次の例に示すように、より複雑な文法ルールを作成できます。

<code class="python">import pyparsing # make sure you have this installed

thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-'
parens     = pyparsing.nestedExpr( '(', ')', content=thecontent)</code>

nestedExpr() 関数は、ネストされた括弧を照合するための文法を定義します。これは 3 つの引数を取ります: 開始括弧と終了括弧の文字、および括弧内で一致する式です。

定義された文法の使用例を次に示します。

<code class="python">>>> parens.parseString("((a + b) + c)")</code>

この解析の出力操作は、一致した式のネストされたリスト表現です:

(                          # all of str
 [
  (                        # ((a + b) + c)
   [
    (                      #  (a + b)
     ['a', '+', 'b'], {}   
    ),                     #  (a + b)      [closed]
    '+',
    'c'
   ], {}
  )                        # ((a + b) + c) [closed]
 ], {}  
)                          # all of str    [closed]

一致した式のネストされたリスト形式を取得するには、asList() メソッドを使用します:

<code class="python">res = parens.parseString("((12 + 2) + 3)")
res.asList()</code>

これは返されます:

[[['12', '+', '2'], '+', '3']]

したがって、pyparsing のネストされた式文法を利用することで、数学的な文字列内のネストされた括弧を効果的に照合して抽出できます。

以上が正規表現と pyparsing を使用して、Python でネストされた括弧を効果的に抽出するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。