2012-05-08 32 views
13

r"r'\nasdf'"のような文字列リテラルを文字列(この場合は'\\nasdf')に変換したいと考えています。Pythonは文字列リテラルを文字列に変換します

もう1つのケース:r"'\nasdf'"~'\nasdf'。 私はあなたがそれを得ることを望みます。

私はPythonスクリプトのパーサーを持っているので、これは重要です。これは文字列リテラルの正確な内容を知りたいからです。

evalは巧妙な解決策ですか?文字列リテラルは(tokenizeで)前もってフィルタリングされており、セキュリティ上の責任を負いません。リテラルを評価するよりも、貴族の解決策はありませんか?パーサーライブラリかもしれない?

:誤解を避けるために、他の例を追加しました。

+0

「生の」文字列であり、「リテラル」ではない –

+0

私は自分の質問を正式に策定しなかったと思います。私はもう一度それをやろうとしています。私は生の弦ではなく、文字列のリテラルを意味しました。 –

+0

十分にクリア。 literal_evalはより貴重な解決策です:) –

答えて

16

あなたがast moduleをしたい:

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

これは(eval()とは異なり)Pythonのソースコードが含まれている/解析文字列を評価するための安全な方法です。

8

はい、あります

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

申し訳ありませんが、私の質問はあまりにも明確ではありませんでした(編集しました)。これは文字列変換から文字列変換への生の文字列ではなく、文字列変換から文字列への変換ではありません。 –

関連する問題