2012-05-08 10 views
13

Ich möchte ein Zeichenfolgenliteral wie r"r'\nasdf'" in eine Zeichenfolge ('\\nasdf' in diesem Fall) konvertieren.Python konvertiert Zeichenfolgenliterale in Zeichenfolgen

Ein anderer Fall: r"'\nasdf'" zu '\nasdf'. Ich hoffe du bekommst es.

Dies ist wichtig, weil ich einen Parser von Python-Skripten habe, der den genauen Inhalt eines String-Literals wissen will.

Ist eval eine clevere Lösung? Die Zeichenfolgenliterale werden vorher gefiltert (mit tokenize) und sollten keine Sicherheitsverpflichtungen verursachen. Gibt es keine edlere Lösungen als die Auswertung eines Literals? Eine Parser-Bibliothek vielleicht?

Bearbeiten: Weitere Beispiele hinzugefügt, um Missverständnisse zu vermeiden.

+0

das wäre eine 'rohe' Zeichenkette, keine 'wörtliche' –

+0

Ich denke, ich habe meine Frage nicht richtig formuliert, ich versuche es wieder richtig zu machen. Ich meinte String-Literale, keine rohen Strings. –

+0

klar genug. und literal_eval ist die edlere Lösung :) –

Antwort

16

Sie wollen die ast module:

>>> import ast 
>>> raw = r"r'\nasdf'" 
>>> ast.literal_eval(raw) 
'\\nasdf' 
>>> raw = r"'\nasdf'" 
>>> ast.literal_eval(raw) 
'\nasdf' 

Das für die Bewertung/Parsing-Strings eine sichere Methode ist, die Python-Quellcode enthalten (im Gegensatz zu eval()).

8

Ja, es gibt:

>>> s = r'\nasdf' 
>>> s.decode('string-escape') 
'\nasdf' 
+0

Sorry, meine Frage war nicht zu übersichtlich (ich redigierte). Dies ist eine Umwandlung von einer Zeichenfolge in eine Zeichenfolge, keine Konvertierung von Zeichenfolgenliteral in Zeichenfolge. –