web-dev-qa-db-ja.com

エスケープせずにバックスラッシュを追加する[Python]

文字列内の_&_(アンパサンド)文字をエスケープする必要があります。問題は、string = string.replace ('&', '\&')の結果が_'\\&'_になるときです。元のバックスラッシュをエスケープするために、追加のバックスラッシュが追加されます。この余分なバックスラッシュを削除するにはどうすればよいですか?

27
Dr. Johnson

結果 '\\&'は表示されるだけです-実際には文字列は\&

>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&

シェルで試してください。

58
Emil Ivanov

余分なバックスラッシュは実際には追加されません。 repr()関数によって追加され、リテラルのバックスラッシュであることを示します。 Pythonインタープリターは、式の結果を印刷する必要がある場合、オブジェクトのrepr()を呼び出す)__repr__()関数を使用します。

>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
22
Thomas
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&

または、言い換えると:'\\&'にはバックスラッシュが1つだけ含まれます。わかりやすくするため、python Shellの出力でエスケープされています。

7
sepp2k

リストを印刷すると、この問題が発生する可能性もあります(Pythonで新しくなったため、少し混乱しました)。

>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\ 

同様に:

>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
6
Kicsi

余分なバックスラッシュはありません。インタラクティブな環境ではそのようにフォーマットされています。試してください:

print string

次に、余分なバックスラッシュがないことがわかります。

5
Mark Byers