2009-12-11 24 views
65

別の文字列のバックスラッシュでエスケープされたバージョンの文字列があるとします。文字列をエスケープする簡単な方法はありますか?私は、例えば、行うことができます:バックスラッシュでエスケープされた文字列をPythonでエスケープ解除するにはどうすればよいですか?

>>> escaped_str = '"Hello,\\nworld!"' 
>>> raw_str = eval(escaped_str) 
>>> print raw_str 
Hello, 
world! 
>>> 

をしかし、セキュリティ上のリスクがある)(evalに(おそらく信頼できない)文字列を渡すことを伴います。標準のlibに文字列をとり、セキュリティの意味がない文字列を生成する関数がありますか?

あなたが安全である ast.literal_evalを使用することができます

答えて

111
>>> print '"Hello,\\nworld!"'.decode('string_escape') 
"Hello, 
world!" 
+5

1オイ私はSOから学ぶすべてのクールなトリックが大好き! – jathanism

+0

素敵なトリックですが、悲しいことに私のために完全には機能しませんでした – sleepycal

+2

Python 3と互換性のあるものはありますか? – thejinx0r

18

:このように

Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None. (END)

>>> import ast 
>>> escaped_str = '"Hello,\\nworld!"' 
>>> print ast.literal_eval(escaped_str) 
Hello, 
world! 
+0

xyの問題が再び私を苦しめます。これはありがとう! – trianta2

+1

文字列にエスケープされたセミコロンを付けると、このコードが破損します。 – darksky

+1

@darkskyあなたのescaped_strの周りに 'ast'ライブラリが引用符(' '' '' '' '、' '' '' '' '' '' '' ')を必要としていることに注意してください。実際にはPythonコードとして実行しようとしていますが、セキュリティを強化しています(文字列の挿入を防ぎます) – no1xsyzy

関連する問題