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: 1141
Registriert: Freitag 17. April 2009, 10:28

Mittwoch 7. März 2012, 12:32

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

Mittwoch 7. März 2012, 12:58

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

Mittwoch 7. März 2012, 12:59

@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

Mittwoch 7. März 2012, 17:55

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: 1141
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 8. März 2012, 08:13

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: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 8. März 2012, 10:18

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))
assert encoding_kapiert
Antworten