Passende ein Paar Kommentare in HTML mit regulären Ausdrücken
-
09-09-2019 - |
Frage
Ich habe eine mako Vorlage, die etwa wie folgt aussieht:
% if staff:
<!-- begin staff -->
...
<!-- end staff -->
% endif
So, wenn ich das Personal Variable als wahr passieren, sollten diese Kommentare erscheinen. Ich versuche, dies zu testen, indem Sie einen regulären Ausdruck, der wie folgt aussieht:
re.search('<!-- begin staff -->.*<!-- end staff -->', text)
Ich habe festgestellt, dass die Kommentare in der HTML-Ausgabe erscheinen, aber der reguläre Ausdruck stimmt nicht überein. Ich habe sogar versucht, die Kommentare (<!-- begin staff -->
und <!-- end staff -->
) durch re.escape setzen, aber noch kein Glück. Was mache ich falsch?
Oder gibt es einen besseren Weg, diesen Test zu laufen?
Lösung
In der Standardeinstellung .
nicht Zeilenumbrüche übereinstimmen - müssen Sie die re.DOTALL
Option hinzufügen
re.search('<!-- begin staff -->.*<!-- end staff -->', text, re.DOTALL)
Wenn Sie mehr als ein Mitarbeiter Schnitt haben, können Sie auch das Spiel ungreedy machen wollen:
re.search('<!-- begin staff -->.*?<!-- end staff -->', text, re.DOTALL)
Andere Tipps
Verwenden Sie einen HTML-Parser wie HTMLParser statt. Siehe können Sie einige Beispiele dafür, warum es schwierig ist, XML und HTML mit einer Regex zu analysieren? warum.