Regulärer Ausdruck tut nicht so wie ich will

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
ralf_gast
User
Beiträge: 3
Registriert: Mittwoch 8. Februar 2006, 07:23

Mittwoch 8. Februar 2006, 11:25

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
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Mittwoch 8. Februar 2006, 11:34

Hi,

hast du denn die { escaped?

Code: Alles auswählen

(\{~.*~})?


wäre wohl eine Möglichkeit für optionale geschweifte Klammern mit diesem Inhalt.
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
ralf_gast
User
Beiträge: 3
Registriert: Mittwoch 8. Februar 2006, 07:23

Mittwoch 8. Februar 2006, 11:54

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
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 8. Februar 2006, 12:01

Ì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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
helmut
User
Beiträge: 57
Registriert: Mittwoch 2. November 2005, 07:45
Wohnort: Dormagen

Mittwoch 8. Februar 2006, 12:53

Hallo Ralf,

versuch es mal mit:

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

Gruss, Helmut
ralf_gast
User
Beiträge: 3
Registriert: Mittwoch 8. Februar 2006, 07:23

Mittwoch 8. Februar 2006, 13:41

Hallo Helmut,
Hallo Jens,

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


RALF
Antworten