[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