Seite 1 von 1

Regulärer Ausdruck tut nicht so wie ich will

Verfasst: Mittwoch 8. Februar 2006, 11:25
von ralf_gast
Hallo Liste!

Ich habe einen Text unterschiedlicher Länge. In diesem Text KÖNNEN Textpassagen eingefügt sein, die dann wie folgt gekennzeichnet werden: {~ ~}.

z.B. "normaler Text {~ hiddentext ~} wieder normaler Text {~ noch mal versteckt~} usw..."

An anderer Stelle sollen diese Texte komplett ausgeblendet werden. Ich lasse den Text durch einen Regulären Ausdruck laufen.

{~.*~}


Leider tut er es nicht so wie ich es denke. Ist der gesuchte Text nur einmal vorhanden, funktioniert es problemlos.

Kommt der versteckte Text nicht oder mehr als einmal vor, passt der gesamte Text zwischen der ersten "{~" und der letzten "~}" in den Ausdruck.


Wo ist mein Denkfehler? Wie muss der Ausdruck richtig aussehen?

Gruß RALF

Verfasst: Mittwoch 8. Februar 2006, 11:34
von tiax
Hi,

hast du denn die { escaped?

Code: Alles auswählen

(\{~.*~})?


wäre wohl eine Möglichkeit für optionale geschweifte Klammern mit diesem Inhalt.

Verfasst: Mittwoch 8. Februar 2006, 11:54
von ralf_gast
Hallo!

Ja, ich lasse den Ausdruck mit der Option r laufen. War nur zu schreibfaul. - und wegen der Übersichtlichkeit :)

Also richtig: my_re = r"""(\{~.*~\})"""

Das Problem ist sicherlich ".*" Alle Zeichen, beliebig viele, also auch "~}".

Aber wie müsste ich den Ausdruck richtig schreiben. Alle Googleergebnisse setzten immer eine feste Länge oder feste Zeichenkette voraus.

Wenn ich z.B. {~...~} schreibe und die Zeichnfolge GENAU 3 Zeichen lang ist funkt es auch wieder.

RALF

Verfasst: Mittwoch 8. Februar 2006, 12:01
von jens
ÌMHO feht da ein Fragezeichen, also so:

my_re = r"""(\{~.*?~\})"""

Von wegen greedy (.*) vs. non-greedy (.*?) : http://www.python-forum.de/viewtopic.php?p=6469#6469

Verfasst: Mittwoch 8. Februar 2006, 12:53
von helmut
Hallo Ralf,

versuch es mal mit:

my_re = r"""(\{~[^~]*~\})"""

Gruss, Helmut

Verfasst: Mittwoch 8. Februar 2006, 13:41
von ralf_gast
Hallo Helmut,
Hallo Jens,

Danke, genau das war's! Danke auch für den Link - man lernt nie aus.


RALF