2017-02-21 1 views
0

効果がある機能はありますかr'some string'r接頭辞の機能は何ですか?

たとえば、変数s='a:b\nc'があります。そして、後でどこかでそれをエスケープしたいので、どのような機能がそれを行うことができますか?

re.escape:もエスケープするので、r-prefixと同じではありません。基本的にr等価な関数は、a\:b\\ncではなく、a:b\\ncを生の文字列として与える必要がありますか?

+2

私はあなたが思っているとは思いません。 –

+3

[Python Raw Strings]の複製があります(http://stackoverflow.com/questions/4415259/python-raw-strings) –

+1

文字列がすでに解析されてメモリ*にあると、 'r '。例えば、私は 'x = 'a:\ u0041''とし、あなたの関数を 'x'にしたいと思いますか?値 'x'は文字列' 'an a:A''と同じです。 '' a:\\ u0041 ''を実行したい場合は、元のリテラル表現がインタープリタで利用できなくなったので、これを行う方法はありません。 (少なくとも、コードファイルの何かを精神的にマニュアルで再解析することなく、壁から均等に何かを再解析することなしに)。あなたが望む結果は不明です。 – jpmc26

答えて

0

文字列リテラルの生の接頭辞が実際に何をしているのかちょっと混乱しているかもしれませんが、とにかく質問を理解していると思います。バックスラッシュをエスケープしたいと思います。

これは私が見つけた最も近いものでした。おそらく良い方法があります:

>>> import codecs 
>>> s = 'a:b\nc' 
>>> codecs.encode(s, 'unicode-escape').decode('utf-8') 
'a:b\\nc' 
+0

ありがとう、前に 'codecs.escape_encode'を試してみましたが、うまくいきませんでした。今私はその前に文字列をバイトに変換する必要があることを理解しています。しかしそれは3つのステップにつながります。あなたの 'codecs.encode'によるアプローチは2つです。 – Nick

+0

OPが望んでいることは明確ではありません。文字列 ''an:\ u0041' 'を考えてみましょう。 OPは '' a:A''または '' a:\\ u0041''を望んでいますか?あなたの答えは前者を返します。 – jpmc26

+0

@ jpmc26あなたは正しいですが、それ以上の助けが必要な場合は、それを明確にすることは彼らの責任です... – wim

関連する問題