[Python-de] mit RegEx text extrahieren?
Detlef Lannert
lannert at uni-duesseldorf.de
Fre Jul 4 18:10:48 EDT 2003
> Ich habe hier eine Textdatei mit folgendem Format:
>
> <htmltag>URL-einer-Seite</htmltag>
> <htmltag>URL-einer-anderen-Seite</htmltag>
> <htmltag>URL-von-nocheiner-Seite</htmltag>
>
> Aus dieser Datei würde ich jetzt gern nur den Text zwischen den
> Html-Tags extrahieren...
>
> Ich habe versucht die Datei mit "readlines()" einzulesen, das geht
> auch soweit ganz gut.
> Allerdings scheitere ich jetzt an dem RegEx..
>
> Mit welchem RegEx kann ich NUR den Text extrahieren bzw. ausschließen
> das die Html-Tags mit extrahiert werden?
> (Soviel wie: gib mir alles was zwischen dem und dem Html-Tag steht)
Wenn das Format so festgelegt ist, wie es in Deinem Beispiel aussieht,
zum Beispiel mit diesem Progrämmchen:
#! /usr/bin/env python
import re
dokument = """<htmltag>URL-einer-Seite</htmltag>
<htmltag>URL-einer-anderen-Seite</htmltag>
<htmltag>URL-von-nocheiner-Seite</htmltag>
"""
muster = re.compile(">([^<]*)</")
zeilen = dokument.split("\n")
for zeile in zeilen:
m = muster.search(zeile)
if m:
print "Treffer:", m.group(1)
Ansonsten, falls also nicht in jeder Zeile genau die Start- und Endetags
mit dem Nutztext dazwischen stehen, müßtest Du die Routinen zum Parsen
von HTML (oder ggf. XML) benutzen.
Die Regex hier sucht nach einem ">", anschließend beliebig vielen Zeichen,
die nicht "<" sind, und als hinterer Begrenzung nach "</". Durch die
runden Klammern wird eine Gruppe definiert, die die Nutzdaten umfaßt und
die anschließend als m.group(1) zur Verfügung steht.
Hdh,
Detlef