16

文字列リテラルを文字列に変換したいr"r'\nasdf'"'\\nasdf'この場合)。

別のケース:r"'\nasdf'"'\nasdf'。私はあなたがそれを得る願っています。

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

eval賢い解決策はありますか?文字列リテラルは ( で) 前にフィルター処理されtokenize、セキュリティの問題を引き起こすことはありません。リテラルを評価するよりも優れた解決策ありませんか? 多分パーサーライブラリ?

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

4

2 に答える 2

23

astモジュールが必要です:

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

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

于 2012-05-08T08:31:54.943 に答える
9

はい、あります:

>>> s = r'\nasdf'
>>> s.decode('string-escape')
'\nasdf'
于 2012-05-08T07:59:52.290 に答える