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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Evo
User
Beiträge: 2
Registriert: Montag 8. September 2008, 01:05

Montag 8. September 2008, 01:18

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 8. September 2008, 01:55

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)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Evo
User
Beiträge: 2
Registriert: Montag 8. September 2008, 01:05

Montag 8. September 2008, 15:18

danke für den Tipp, aber damit bin ich nicht wirklich weiter gekommen.

ich habe jetzt mit beautifulsoup was funktionsfähiges zusammengebastelt :)
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Montag 8. September 2008, 19:02

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Samstag 13. September 2008, 08:45

Alternativ siehe hier...

Stefan
Antworten