Seite 1 von 1

Regex - Linktext

Verfasst: Donnerstag 8. Juli 2010, 17:01
von Timbo
Hallo,

ich muss aus einem String, der mehrere Links enthält, den Linktext extrahieren:

Code: Alles auswählen

'<div id="links"><a href="/abc/def">ABC</a>&#160;|&#160;<a href="/ghi/jkl">JKL</a>&#160;|&#160;<a href="/ghi/jgk/index.php?id=12">JKL blah</a></div>'
Ich habe u.a. mit folgendem Code versucht, den Linktext der Strings auszufiltern:
>>> r = re.compile("""<a href=".*">(?P<linktext>.*)</a>""")
>>> r.findall(string)
['JKL blah']
Damit erhalte ich zwar einen Linktext, allerdings nur den des letzten Links. Das Problem scheint wohl mit dem ersten .* zusammenzuhängen.

Könnte mir jemand sagen, wie ich auch die anderen beiden erhalte?

Gruß
Tim

Re: Regex - Linktext

Verfasst: Donnerstag 8. Juli 2010, 17:12
von Barabbas
Das liegt daran, dass * greedy sucht. Mit *? geht es:

Code: Alles auswählen

re.compile(r'<a href=".*?">(.*?)</a>').findall(txt)
Schönen Gruß,

brb

Re: Regex - Linktext

Verfasst: Donnerstag 8. Juli 2010, 17:21
von Timbo
Super, dankeschön!
"(non)greedy" kannte ich noch nicht.

Gruß
Tim

Re: Regex - Linktext

Verfasst: Donnerstag 8. Juli 2010, 17:32
von Hyperion
Natürlich darf hier der Standard Hinweis nicht fehlen, dass man HTML nicht mit RegExps parsen sollte, sondern mit einem HTML-Parsern (lxml, html5lib, ...).