Regular Expression : Punkt escapen oder nicht ?

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
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Hallo Pythons,

ich musste gestern eine Anpassung an einem Script vornehmen und bin auf folgende Unregelmässigkeit gestossen :

Code: Alles auswählen

match = re.compile("^[^\.].*[\.]dpx$")
und

Code: Alles auswählen

match = re.compile("^[^.].*[.]dpx$")
verhalten sich gleich ???

Ich dachte auch innerhalb von Charsets muss man Punkte escapen. Zumindest ist es keinen Fehler das zu tun.

Das Ziel :
Ich will Dateien im Format blablabla.dpx haben und .blablabla.dpx nicht mitnehmen ( scheiss OSX :wink: )

Gruss,
Gunnar

P.S.
Hier etwas Code zum Testen

Code: Alles auswählen

import re
match = re.compile("^[^\.].*[\.]dpx$")
i = "c890d8fsdfjlk.dpx"
if not match.match(i) is None:
print "jo"
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Innerhalb von eckigen Klammern wird bei RegExp's alles wörtlich genommen mit ein paar wenigen Ausnahmen:

* Ein '^' am Anfang
* Ein '-' das für eine Range steht wie in "0-9" oder "a-z"
* \t & co.

das müsste es so grob sein, mag sein dass "\" auch in bestimmten Situationen nicht "roh" interpretiert werden (z.B. am Anfang), bin ich grad nicht sicher.
Im Zweifelsfall auch mal man-page zu re oder pcre (oder so) nachgucken, da stand das irgendwo iirc.
Ist jedenfalls kein Python-Ding sondern ne RE-Konvention so weit ich weiß.
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Danke Henning,

ich habe auch mal recherchiert, aber noch nichts genaues gefunden. Aber ich vermute es ist sicherer ohne den Backslash, weil die Punkte tatsächlich als einfaches Zeichen interpretiert werden.

Gruss aus dem winterlichen Hamburg,
Gunnar
Antworten