Seite 1 von 1

Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Mittwoch 7. März 2012, 12:32
von sparrow
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

Re: Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Mittwoch 7. März 2012, 12:58
von 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.

Re: Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Mittwoch 7. März 2012, 12:59
von 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.

Re: Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Mittwoch 7. März 2012, 17:55
von sma
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

Re: Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Donnerstag 8. März 2012, 08:13
von sparrow
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.

Re: Reguläre Ausdrücke: Zeichenkette ausscchließen

Verfasst: Donnerstag 8. März 2012, 10:18
von Hyperion
sparrow hat geschrieben: Es ging übrigens nicht um HTML sondern um eine Auszeichnungssprache.
HTML ist eine Auszeichnungssprache - die Aussage ist somit falsch :mrgreen: SCNR