Reguläre Ausdrücke: Zeichenkette ausscchließen

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
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Hallo Forum,

ich stehe gerade auf dem Schlauch.

Wenn ich möchte, dass alles außer ein Zeichen funktioniert geht das so: [^"]*, damit gehen alle Zeichen durch, bis auf doppelt Anführungszeichen.

Jetzt möchte ich aber statt den Anführungszeichen eine Zeichenkette definieren. Da komme ich gerade nich drauf. Sprich: ich möchte, dass jedes Zeichen genommen wird, aber bei der Zeichenkette </a> soll abgebrochen werden.

Mich verwirrt es gerade.

Gruß
Sparrow
deets

Das ist MIT regulären Ausdrücken auch nicht so einfach möglich. Und da du html zu prozessieren scheinst, solltest du reguläre Ausdrücke auch einfach vermeiden und gleich einen robusten html Parser wie beautifulsoup oder lxml benutzen.
BlackJack

@sparrow: Nimm für HTML lieber einen HTML-Parser statt selber etwas mit regulären Ausdrücken zu basteln. `lxml.html` ist ganz gut.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

So etwas?

Das Geheimnis ist hier das "?", welches den "*" non-greedy macht, d.h. es wird nicht der längste sondern der kürzeste Teilstring gesucht, nach dem ein "</a>" folgt.

(Üblicher Disclaimer, das REs keine gute Wahl für HTML-Dokumente sind, gilt)

Code: Alles auswählen

print re.search(r"<a>(.*?)</a>", "Hallo <a>Welt</a>!").group(1)
Stefan
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Hah, das war es. Danke sma!
Da hatte ich irgendwie einen Knoten im Hirn.

Es ging übrigens nicht um HTML sondern um eine Auszeichnungssprache. Also etwas wie BBCode.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sparrow hat geschrieben: Es ging übrigens nicht um HTML sondern um eine Auszeichnungssprache.
HTML ist eine Auszeichnungssprache - die Aussage ist somit falsch :mrgreen: SCNR
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten