7
votes

Regex: correspondance des supports gourmands et non gourmands

J'utilise le module d'expression régulier Python, re code>.

J'ai besoin de faire correspondre n'importe quoi à l'intérieur '(' ')' sur ces deux phrases, mais "pas si gourmand". Comme ceci: p> xxx pré>

Le résultat doit revenir, de la phrase 1: p> xxx pré>

Le résultat doit revenir de la phrase 2: P>

+ (* (2 4) 3)


4 commentaires

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

4 Réponses :


-3
votes

Tant que les crochets ne sont pas imbriqués, vous pouvez utiliser une regex paresseuse: xxx

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.


2 commentaires

Je pense qu'il est assez clair du 2e exemple que parfois les parenthèses sont imbriquées.


@Matt Ball: Ouais, je pensais juste que l'OP pourrait être intéressé par la syntaxe de correspondance non gourmande



0
votes

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 pylisp out). Il n'est pas nécessaire d'utiliser Regexps pour analyser ces types d'expressions.

Voir Yard Shunting Article @ Wikipedia et c'est Python Mise en œuvre .


0 commentaires

7
votes

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


0 commentaires

0
votes

Ceci correspond à toutes les informations requises: xxx

groupe 1 = + (* (2 4) 3)

  • Le dernier ")" peut être dépouillé avec .strip (')')

    groupe 2 = nom , personne


0 commentaires