Seite 1 von 1

string nach raw-string konvertieren

Verfasst: Sonntag 7. Oktober 2007, 12:45
von diff
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...

Verfasst: Sonntag 7. Oktober 2007, 12:56
von mq
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.

Verfasst: Sonntag 7. Oktober 2007, 13:04
von diff
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?

Verfasst: Sonntag 7. Oktober 2007, 13:39
von mq
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).

Verfasst: Sonntag 7. Oktober 2007, 19:13
von 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'

Verfasst: Sonntag 7. Oktober 2007, 21:18
von diff
danke, 're.escape()' ist dann wohl genau das was ich (eigentlich) gesucht hatte :)