Correspondant à une paire de commentaires en HTML en utilisant des expressions régulières
-
09-09-2019 - |
Question
J'ai un modèle de Mako qui ressemble à ceci:
% if staff:
<!-- begin staff -->
...
<!-- end staff -->
% endif
De cette façon, si je passe la variable du personnel comme étant vrai, ces commentaires devraient apparaître. Je suis en train de tester en utilisant une expression régulière qui ressemble à ceci:
re.search('<!-- begin staff -->.*<!-- end staff -->', text)
Je l'ai vérifié que les commentaires apparaissent dans la sortie HTML, mais l'expression régulière ne correspond pas. J'ai même essayé de mettre les commentaires (<!-- begin staff -->
et <!-- end staff -->
) par re.escape, mais toujours pas de chance. Qu'est-ce que je fais mal?
Ou est-il une meilleure façon de lancer ce test?
La solution
Par .
par défaut ne correspond pas à des sauts de ligne - vous devez ajouter l'option re.DOTALL
re.search('<!-- begin staff -->.*<!-- end staff -->', text, re.DOTALL)
Si vous avez plus d'une section du personnel, vous pouvez également faire le match ungreedy:
re.search('<!-- begin staff -->.*?<!-- end staff -->', text, re.DOTALL)
Autres conseils
Utilisez un HTML Parser comme HTMLParser à la place. Voir Pouvez-vous donner quelques exemples des raisons pour lesquelles il est difficile d'analyser XML et HTML avec une regex pourquoi.