Maison >développement back-end >Tutoriel Python >Regex peut-il gérer les parenthèses imbriquées ? Explorer les limites et les solutions de pyparsing.
La correspondance de parenthèses imbriquées dans des chaînes peut être une tâche difficile, en particulier lors de l'utilisation d'expressions régulières (regex). Considérez le code Python suivant :
<code class="python">import re p = re.compile('\(.+\)') str = '(((1+0)+1)+1)' print(p.findall(str))</code>
Ce code tente de faire correspondre toutes les chaînes de type expression mathématique dans la variable str à l'aide d'un seul modèle d'expression régulière. Cependant, il ne correspond qu'à l'expression entière dans son ensemble, même si l'objectif est d'identifier les parenthèses imbriquées individuelles.
Les modèles Regex sont limités dans leur capacité à gérer les constructions imbriquées efficacement. L'expression (. ) correspond à n'importe quelle chaîne entre parenthèses, mais elle ne peut pas faire la distinction entre les différents niveaux d'imbrication. En conséquence, il regroupe tout ce qui se trouve dans les parenthèses les plus extérieures et ignore les parenthèses intérieures.
Pour surmonter les limites des regex, nous pouvons exploiter une bibliothèque plus avancée appelée pyparsing , qui fournit un analyseur spécialisé pour gérer les modèles de chaînes complexes. Voici un exemple utilisant pyparsing :
<code class="python">import pyparsing thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-' parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>
Ce code définit deux éléments : le contenu, qui représente des caractères individuels ou des opérateurs arithmétiques, et les parenthèses, qui définissent la structure des parenthèses imbriquées.
Montrons cette solution avec un exemple :
<code class="python">res = parens.parseString("((12 + 2) + 3)") print(res.asList())</code>
[[['12', '+', '2'], '+', '3']]
L'utilisation de pyparsing pour la correspondance des parenthèses imbriquées offre plusieurs avantages sur regex :
Bien que les expressions régulières puissent être utiles pour une simple correspondance de chaînes, elles ont du mal à gérer les constructions imbriquées comme les parenthèses. Pour de tels scénarios, les bibliothèques d'analyse spécialisées telles que pyparsing offrent une alternative robuste et flexible, garantissant des résultats de correspondance précis et significatifs.
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!