Maison > Article > développement back-end > Comment faire correspondre les parenthèses imbriquées dans les chaînes : 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!