[Python-de] re und findall

Georg Mischler schorsch at schorsch.com
Mon Feb 28 00:56:31 CET 2005


Albert Hermeling wrote:

> Guten Abend,
>
> ich habe folgenden Regulären Ausdruck erstellt der mir alle Meta-Angaben aus
> einer HTML Datei extrahiert:
>
> a = re.compile(r"<.*[meta].+>",flags=re.I | re.U | re.S)
>
> [...]
>
> !!Ausgabe:!!
> ['<META http-equiv="Content-Type" content="text/html;
> charset=iso-8859-15"><meta name="robots" content="index, follow">']
>
> Nach meinem Verständnis müßten es zwei Einträge in der Liste sein. Wo ist hier
> mein Denkfehler?


a = re.compile(r"<\s*[meta][^>]+>",flags=re.I | re.U | re.S)

\s   unsichtbare Zeichen ("whitespace" = space, tab, etc.).
     Etwas anderes sollte an dieser Stelle nicht vorkommen.

[^>] alles, ausser ein >
     REs sind gierig.
     Mit deinem .+ sucht das Pattern weiter, bis zum allerletzten
     > in der Datei (also in der Praxis meistens das vom </html>).
     Falls in den Attribut-Werten der Meta-Tags ebenfalls > vorkommen
     können, dann wird die Sache etwas komplizierter, geht aber auch.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/