string nach raw-string konvertieren

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
diff
User
Beiträge: 3
Registriert: Samstag 6. Oktober 2007, 11:27

hallo,
habe folgendes problem:

Code: Alles auswählen

[...]
s = a[0]

pattern = re.compile(r'''
            [...]''' +
            s + '''                      # s wird hier nicht als raw-string gewertet
            [...]
            ''', re.VERBOSE)
gibt es etwas einfaches wie s.toRaw()? oder einen anderen ansatz? habe gerade das gefühl ich seh den wald vor lauter bäumen nicht...
€: hm, ich hätte mal vorher hier im forum suchen sollen... problem gelöst €2: oder auch doch nicht...
Zuletzt geändert von diff am Sonntag 7. Oktober 2007, 12:58, insgesamt 1-mal geändert.
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Raw Strings sind nur syntaktischer Zucker. Technisch gesehen (z.B. wenn du sie an einen Namen (z.B. s) bindest) sind das ganz normale Strings. Sprich, da musst du nichts konvertieren.
diff
User
Beiträge: 3
Registriert: Samstag 6. Oktober 2007, 11:27

hm ok, dann hab ich wohl am problem vorbeigesucht.

also s ist in der form '[123]abc'... so trifft es aber die regexp nicht (auch nicht als raw), '\[123\]abc' aber schon. '[' und ']' sind ja aber auch eigentlich keine escape-sequenzen?
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Mit den eckigen Klammern haben raw strings nichts zu tun, die sind nur dazu da, dass Escape-Sequenzen (also mit \) nicht escapet werden.
Deine Frage kann ich nicht beantworten, weil ich nicht genau verstehe, was du erreichen willst... (aber [ hat in RegExps schon eine spezielle Bedeutung, wenn du keinen \ davor schreibst).
BlackJack

Wie lumax schon sagte haben '[' und ']' eine besondere Bedeutung in regulären Ausdrücken. '[123]abc' erkennt Zeichenketten die eine der Ziffern 1 bis 3 und dann die Buchstabenfolge 'abc' enthält. Also '1abc', '2abc', und '3abc'. Wenn Du die eckigen Klammern erkennen willst, müssen diese durch ein '\' geschützt werden. Wenn die Daten von irgendwoher "ungeschützt" kommen, kann man `re.escape()` vewenden:

Code: Alles auswählen

In [3]: re.escape('[123]abc')
Out[3]: '\\[123\\]abc'
diff
User
Beiträge: 3
Registriert: Samstag 6. Oktober 2007, 11:27

danke, 're.escape()' ist dann wohl genau das was ich (eigentlich) gesucht hatte :)
Antworten