J'utilise le module d'expression régulier Python, J'ai besoin de faire correspondre n'importe quoi à l'intérieur '(' ')' sur ces deux phrases, mais "pas si gourmand". Comme ceci: p> Le résultat doit revenir, de la phrase 1: p> Le résultat doit revenir de la phrase 2: P> re code>.
+ (* (2 4) 3)
4 Réponses :
Tant que les crochets ne sont pas imbriqués, vous pouvez utiliser une regex paresseuse: pendant que vous pouvez analyser théoriquement une quantité limitée de nidification dans une regex, c'est très difficile et ne vaut pas la peine d'être l'effort. Il est beaucoup plus facile de le faire en utilisant une fonction Python personnalisée. Voir Cette réponse pour un bon explication. P> p>
Je pense qu'il est assez clair du 2e exemple que parfois les parenthèses sont i> imbriquées.
@Matt Ball: Ouais, je pensais juste que l'OP pourrait être intéressé par la syntaxe de correspondance non gourmande
Qu'est-ce que vous essayez de faire ressembler à une cour de pincement (il ressemble en fait à Lisp, alors peut-être que vous devriez peut-être vérifier Voir Yard Shunting Article @ Wikipedia et c'est Python Mise en œuvre . P>
Pyparsing facilite l'écriture d'analyseurs unique simples pour des trucs comme celui-ci:
>>> for match in pyparsing.originalTextFor(pyparsing.nestedExpr('(',')')).searchString(text): ... print match[0] ... (name) (person) (+ (* (2 4) 3))
Ceci correspond à toutes les informations requises: groupe 1 = groupe 2 =
Stackoverflow.com/questions/1732348/...
Un très bon outil à base de python + pyqt3 pour tester Regexps est Kodos. Vérifiez-le, cela m'aide beaucoup quand je suis dans "Regexp Doutout".
Pour élaborer le commentaire de @chris, on dirait que vous essayez d'utiliser des expressions régulières pour analyser une langue qui n'est pas régulière. Ne fais pas ça.
Une autre question très similaire sur les crochets imbriqués à Python est ici ici