Regular expression: ich steh mal wieder auf dem Schlauch

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
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Samstag 28. Februar 2009, 21:39

Hallo!

Ich steh leider mal wieder auf dem Schlauch bei den REs. Folgender Codeschnipsel klappt leider nicht so ganz wie ich das moechte:

Code: Alles auswählen

import re
proxypath = '/mnt/frozone/projects/pope_joan/180_010/scans/vfx_180_010_2_1/2734x1538/proxies_half/vfx_180_010_2_1.%07d.jpg'
newpath = re.sub(r'/proxies_.?/', r'/proxies_full/', proxypath)
print newpath
eigentlich sollte in dem String das '/proxies_half/' zu '/proxies_full/' werden, wird es aber nicht. Wenn ich die gleiche RegEx aber in nem RegEx-Tester z.B. von KomodoIDE oder http://regexlib.com/ oder sowas teste dann klappt es.

Was ist also erstens an obigem Code falsch daß es SO nicht in Python funktioniert?

Und wie könnte man das evtl. insgesamt viel besser und eleganter schreiben? Der String sieht immer aus wie oben, nur steht da entweder 'half' oder 'full' oder 'quarter' und das soll dann jeweils gegen einen anderen der drei Werte getauscht werden.

Danke fürs Aufdiesprüngehelfen!
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Samstag 28. Februar 2009, 22:04

Mich würde mal interessieren, wie du dazu kommst, dass das funktionieren soll. `.?' matcht 0 oder 1 beliebige Zeichen, nicht beliebig viele. veränderst du das zu `.*' funktioniert es.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Samstag 28. Februar 2009, 22:11

Folgenden Code finde ich besser, weil er nicht gierig ist:

Code: Alles auswählen

re.sub(r'/proxies_.+?/', r'/proxies_full/', proxypath)
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Samstag 28. Februar 2009, 22:22

ah, ich Rindvieh. Das + steht im Expressiontester natürlich auch drin :) Sorry, eigene Fehlleistung. Danke fürs Augenöffnen!
Antworten