Maison  >  Article  >  développement back-end  >  Comment faire correspondre les parenthèses imbriquées dans les chaînes : Regex vs Pyparsing

Comment faire correspondre les parenthèses imbriquées dans les chaînes : Regex vs Pyparsing

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 12:35:30696parcourir

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

Faire correspondre des parenthèses imbriquées avec des expressions régulières

Lorsqu'il s'agit de chaînes contenant des parenthèses imbriquées, l'utilisation d'expressions régulières pour la correspondance peut s'avérer difficile. Bien que le code fourni, qui utilise re.findall(), réussisse à faire correspondre l'expression la plus externe, il ne parvient pas à capturer celles imbriquées.

Pourquoi les expressions régulières ne sont pas à la hauteur

Les expressions régulières sont intrinsèquement limitées lorsqu'il s'agit de gérer des structures imbriquées en raison de leur nature plate. Il leur manque le concept de récursivité ou de retour en arrière, ce qui est crucial pour analyser des constructions complexes comme les parenthèses imbriquées.

Une meilleure solution : le Pyparsing

Au lieu d'utiliser des expressions régulières pour cela tâche, une meilleure option consiste à exploiter Pyparsing, une bibliothèque spécialement conçue pour analyser les structures grammaticales imbriquées. Pyparsing fournit la fonction nestedExpr(), qui nous permet de définir des grammaires capables de gérer les constructions imbriquées.

L'extrait de code suivant montre comment utiliser Pyparsing pour faire correspondre et analyser les parenthèses imbriquées :

<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>

Maintenant, vous pouvez utiliser parens pour analyser une chaîne contenant des parenthèses imbriquées :

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

Sortie :

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

La sortie est une liste imbriquée, où chaque la liste interne représente une partie de l'expression analysée.

Conclusion

Bien que les expressions régulières puissent être utiles pour certaines tâches de manipulation de chaînes, elles ont des limites lorsque vous travaillez avec des expressions complexes et imbriquées. structures. Dans de tels cas, Pyparsing propose une solution plus complète adaptée à ces scénarios.

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