Seite 1 von 1

Regex zur Bearbeitung von "nicht" a- & img-ele

Verfasst: Montag 8. September 2008, 01:18
von Evo
Naben'd (oder eher guten Morgen) ;)

da ich seit einiger Zeit schon mit Django & Python im allgemeinen rumspiele, war die Zeit nun reif für eine Anmeldung bei euch im Board.

Ich habe auch gleich ein Problem. Das lästige Thema der Regex-Erstellung:

Ich programmiere zur Zeit eine Seite mit Hilfe von Django. Dort sollen Artikel eingestellt werden, welche mit einem Stichwortverzeichniss verknüpft werden sollen (Glossar). Diese Verlinkung soll direkt im Text stattfinden, jedoch nicht innerhalb von vorhandenen link-tags, image-tags, & object-tags.

Hier mal ein Beispielstring. Hier soll nur das 3. foo durch einen Link ersetzt werden.

Code: Alles auswählen

string = '<a href="/test/foo123.html">foo bild</a>foo fooo <img src="/foo.gif" />'
Folgendes habe ich mir (sogut es irgendwie möglich war) zusammengebastelt, in der Hoffnung, dem ganzen etwas näher zu kommen (zumindest schonmal die Link-Tags rausfiltern):

Code: Alles auswählen

string = 'foo<a href="/test/foo.html">foo</a>foo. fooo <img src="/foo.gif"/>'
string_neu = re.sub(r'(?P<tag_open>!\<a href\="[.]*?)foo(?P<tag_close>![.]*?\<\/a\>)', '\g<tag_open>bar\g<tag_close>', string)
string_neu = re.sub('(<a\b[^>]*)(.*?)(</a>)', '\1bar\2', string)
Bewirken tut das ganze aber garnichts :(

Wer könnte mir da etwas unter die Arme greifen? Ich hänge hier jetzt schon seit Stunden vor, ohne wirklich weiter zu kommen...

Viele Grüße,
Evo

Verfasst: Montag 8. September 2008, 01:55
von Leonidas
Hallo Evo, willkommen im Forum,

ich finde HTML + Reguläre Ausdrücke mehr als ätzend. Wie wäre es einen Parser zu nehmen?

So als Ausgangspunkt kannst du ja das nehmen:

Code: Alles auswählen

import lxml.html
s = '<a href="/test/foo123.html">foo bild</a>foo fooo <img src="/foo.gif" />'
doc = lxml.html.fromstring(s)
doc.insert(1, lxml.html.Element('img'))
print lxml.html.tostring(doc)

Verfasst: Montag 8. September 2008, 15:18
von Evo
danke für den Tipp, aber damit bin ich nicht wirklich weiter gekommen.

ich habe jetzt mit beautifulsoup was funktionsfähiges zusammengebastelt :)

Verfasst: Montag 8. September 2008, 19:02
von epsilon
Evo hat geschrieben:danke für den Tipp, aber damit bin ich nicht wirklich weiter gekommen.

ich habe jetzt mit beautifulsoup was funktionsfähiges zusammengebastelt :)
Deiner Meinung nach ist beautifulsoup also kein Parser? :)

PS: ich würde auch eher lxml nehmen.

Verfasst: Samstag 13. September 2008, 08:45
von sma
Alternativ siehe hier...

Stefan