2012-05-08 30 views
13

Voglio convertire una stringa letterale come r"r'\nasdf'" in una stringa ('\\nasdf' in questo caso).Python converte stringhe di stringhe in stringhe

Un altro caso: r"'\nasdf'" a '\nasdf'. Spero che tu lo capisca.

Questo è importante, perché ho un parser di script Python, che vuole conoscere il contenuto esatto di una stringa letterale.

È eval una soluzione intelligente? I valori letterali delle stringhe vengono filtrati in precedenza (con tokenize) e non devono comportare rischi per la sicurezza. Non ci sono soluzioni nobler rispetto alla valutazione di un valore letterale? Una libreria di parser forse?

Modifica: aggiunti altri esempi, per evitare equivoci.

+0

che sarebbe una stringa "grezza", non un "letterale" –

+0

Penso di non aver formulato la mia domanda giusta, sto cercando di farlo di nuovo bene. Intendevo letterali stringa, non stringhe non elaborate. –

+0

abbastanza chiaro. e literal_eval è la soluzione più nobile :) –

risposta

16

si desidera che il ast module:

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

Questo è un metodo sicuro per la valutazione/stringhe di parsing che contengono codice sorgente Python (a differenza eval()).

8

Sì, ci sono:

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

Scusa, la mia domanda non era troppo chiara (ho modificato). Questa è una stringa raw per la conversione delle stringhe, non una conversione da stringa letterale a stringa. –