Maison  >  Article  >  développement back-end  >  Comment extraire efficacement les parenthèses imbriquées en Python à l'aide d'expressions régulières et de pyparsing ?

Comment extraire efficacement les parenthèses imbriquées en Python à l'aide d'expressions régulières et de pyparsing ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 11:47:29359parcourir

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

Extraction de parenthèses imbriquées en Python à l'aide de Regex

En Python, extraire des parenthèses imbriquées à l'aide d'expressions régulières peut s'avérer difficile. Une approche courante consiste à utiliser la méthode re.compile(), comme démontré dans l'extrait de code fourni. Cependant, cette méthode peut ne pas toujours donner les résultats souhaités lorsqu'il s'agit de constructions imbriquées complexes.

Pour les situations impliquant des parenthèses imbriquées, une approche alternative utilisant la bibliothèque pyparsing offre une plus grande flexibilité. Pyparsing permet la création de règles de grammaire plus élaborées, comme le montre l'exemple :

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

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

La fonction nestedExpr() définit une grammaire pour faire correspondre les parenthèses imbriquées. Il faut trois arguments : les caractères des parenthèses ouvrantes et fermantes et l'expression à faire correspondre entre les parenthèses.

Voici un exemple d'utilisation de la grammaire définie :

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

Le résultat de cette analyse L'opération est une représentation de liste imbriquée de l'expression correspondante :

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

Pour obtenir un format de liste imbriquée de l'expression correspondante, utilisez la méthode asList() :

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

Cela renverra :

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

Par conséquent, en utilisant la grammaire des expressions imbriquées de pyparsing, vous pouvez efficacement faire correspondre et extraire des parenthèses imbriquées dans des chaînes de type mathématique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn