[Python-de] HTML mit RegEx filtern

Christopher Arndt chris.arndt at web.de
Mi Dez 20 23:29:18 CET 2006


Stefan Antonelli schrieb:
> Ich bin immerhin schon so weit (bitte nicht kreuzigen):
> 
> text = re.sub('<img src="(.*?)">', lambda mat: mat.group(1), text)
> 
> Das filtert mir in einem String enthaltene Bilder heraus und gibt deren URLs
> zurück... Aber das muss doch schöner gehen? Und lambda ist an der Stelle doch
> eigentlich auch irgendwie weg zu kriegen?

Reguläre Ausdrücke waren noch nie schön! ;-)

Na klar, kannst du ohne lambda auskommen, definiere einfach eine richtige
Funktion und gib deren Name als 2. Argument von re.sub an. Aber irgendeine Art
von Callback brauchst du, so funktioniert die re.sub-Funktion nun mal.

Besser wäre übrigens folgender Ausdruck:

'(?i)<img .*?src="(.*?)".*?>'

Dann können auch noch andere Attribute vor und nach 'src' kommen und die Tags
dürfen auch in Großschreibung stehen. Aber daran siehst du schon, dass es mit
regulären Ausdrücken irgendwann hässlich wird, wenn man alle Eventualitäten
abdecken will (was dann meistens doch nicht gelingt).

Chris