ホームページ  >  記事  >  バックエンド開発  >  文字列内でネストされた括弧を照合する方法: 正規表現と Pyparsing

文字列内でネストされた括弧を照合する方法: 正規表現と Pyparsing

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 12:35:30696ブラウズ

How to Match Nested Parentheses in Strings: Regex vs. Pyparsing

ネストされた括弧と正規表現の一致

ネストされた括弧を含む文字列を扱う場合、正規表現を使用して一致させるのは困難な場合があります。 re.findall() を使用する提供されたコードは、最も外側の式のマッチングには成功しますが、ネストされた式のキャプチャには失敗します。

正規表現では不十分な理由

正規表現はそのフラットな性質により、入れ子構造の処理に関して本質的に制限があります。これらには、入れ子になった括弧のような複雑な構造を解析するのに重要な再帰やバックトラッキングの概念がありません。

より良い解決策: Pyparsing

これには正規表現を使用する代わりにより良いオプションは、入れ子になった文法構造を解析するために特別に設計されたライブラリである Pyparsing を活用することです。 Pyparsing は、nestedExpr() 関数を提供します。これにより、ネストされた構造を処理できる文法を定義できます。

次のコード スニペットは、Pyparsing を使用してネストされた括弧を照合および解析する方法を示しています。

<code class="python">import pyparsing

# Define the elements of the expression
thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-'

# Define the nested expression grammar
parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>

ここで、括弧を使用して、ネストされた括弧を含む文字列を解析できます:

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

出力:

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

出力はネストされたリストであり、それぞれが内部リストは、解析された式の一部を表します。

結論

正規表現は特定の文字列操作タスクには便利ですが、複雑でネストされたものを扱う場合には制限があります。構造物。このような場合、Pyparsing は、これらのシナリオに合わせたより包括的なソリューションを提供します。

以上が文字列内でネストされた括弧を照合する方法: 正規表現と Pyparsingの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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