文字列内の_&
_(アンパサンド)文字をエスケープする必要があります。問題は、string = string.replace ('&', '\&')
の結果が_'\\&'
_になるときです。元のバックスラッシュをエスケープするために、追加のバックスラッシュが追加されます。この余分なバックスラッシュを削除するにはどうすればよいですか?
結果 '\\&'
は表示されるだけです-実際には文字列は\&
:
>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
シェルで試してください。
余分なバックスラッシュは実際には追加されません。 repr()
関数によって追加され、リテラルのバックスラッシュであることを示します。 Pythonインタープリターは、式の結果を印刷する必要がある場合、オブジェクトのrepr()
を呼び出す)__repr__()
関数を使用します。
>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&
または、言い換えると:'\\&'
にはバックスラッシュが1つだけ含まれます。わかりやすくするため、python Shellの出力でエスケープされています。
リストを印刷すると、この問題が発生する可能性もあります(Pythonで新しくなったため、少し混乱しました)。
>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\
同様に:
>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
余分なバックスラッシュはありません。インタラクティブな環境ではそのようにフォーマットされています。試してください:
print string
次に、余分なバックスラッシュがないことがわかります。