Forum Programmation.python aide sur les RE

Posté par  .
Étiquettes : aucune
0
12
sept.
2007
Bonjour,

je suis en train de travailler sur une macro pour le Wiki MoinMoin écrit en Python.
Ma macro permet de récupérer une liste de titres de pages en regardant le contenu de la page.
Pour l'instant, elle se base sur le modèle
= texte =
or celui-ci permet de spécifier un titre H1 et n'est pas réellement spécifique à un titre de page[1] et j'aimerais qu'il puisse également reconnaitre les titres sous formes de texte gras
'''texte'''

Actuellement, dans ma macro, c'est la boucle

header1_re = re.compile(r'^\s*=\s(.*)\s=$', re.MULTILINE)
for match in header1_re.finditer(daycontent):
if match:
title = match.group(1)
result.append("<a href=\"%s/%s\">%s (%s)" % (request.getBaseURL(),link,title,datestr))


J'ai donc essayé de modifier

re.compile(r'^\s*=\s(.*)\s=$', re.MULTILINE)


par

re.compile(r"^\s*['''|=]\s(.*)\s['''|=]$", re.MULTILINE)


Et plusieurs autres solutions, mais je me rend fou avec kodos parce que je n'arrive pas du tout à trouver la RE qui marche avec le texte que je veux matcher...

quelqu'un peut-il me donner un coup de main ?

ps : j'ai testé avec bbb au lieu de ''' au cas ou ce sont des caractères spéciaux qu'il faudrait que je protège d'une manière ou d'une autre (je n'ai pas trouvé d'infos sur ça)

[1] ce n'est pas pratique si on utilise la macro TableOfContents() pour générer une table des matières d'avoir un titre H1 qui englobe tous les autres
  • # Re: aide sur les RE

    Posté par  . Évalué à 4.

    Il faut bien faire la différence pour les alternatives dans les expressions rationnelles entre [] et ()

    Ici tu utiliser ['''|=] mais ce que tu veux dire c'est ("""|=) car [] n'utilise pas de séparateur et prend chaque caractère comme une alternative
    [abc|d] revient à dire soit a soit b soit c soit |
    alors que
    (abc|d) revient à dire soit abc soit d

    Ton expression devient après correction

    re.compile(r"^\s*('''|=)\s(.*)\s('''|=)$", re.MULTILINE)

    J'espère avoir été clair

    Etienne
    • [^] # Re: aide sur les RE

      Posté par  . Évalué à 1.

      oui, c'est très clair.
      Merci du conseil, je n'avais pas vu cette différence ou ne l'avait pas compris et je comprends maintenant un peu mieux pourquoi kodos me sortait des groupes avec ''texte'''.

      Par contre, du coup, le fait de mettre des parenthèses modifie la numérotation de mes groupes non ?

      je continue à chercher voire si j'arrive à obtenir cette fois-ci ce que je veux.
      • [^] # Re: aide sur les RE

        Posté par  . Évalué à 2.

        Oui ça modifie la numérotation, mais tu peux utilisé des groupes nommés :

        re.compile(r"^\s*('''|=)\s(?P.*)\s('''|=)$", re.MULTILINE)

        ou ignorer ceux qui ne t'intéressent pas :


        re.compile(r"^\s*(?:'''|=)\s(.*)\s(?:'''|=)$", re.MULTILINE)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.