我需要轉義字符串中的&
(與號)字符。問題是我結果是'\\&'
。額外的反斜槓被添加來逃避原始的反斜槓。我如何刪除這個額外的反斜槓?在不轉義的情況下添加反斜槓[Python]
回答
額外的反斜槓並未實際添加;它只是由repr()
函數添加來表示它是一個文字反斜槓。 Python解釋器使用repr()
功能(該對象上調用__repr__()
)當需要打印的表達式的結果:
>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
沒有額外的反斜槓,它只是格式化的交互式環境的方式。嘗試:
print string
然後你就可以看到真的沒有多餘的反斜槓。
結果'\\&'
只顯示 - 實際上字符串是\&
:
>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
嘗試在一個外殼。
爲什麼這不被標記爲解決方案? – erikbwork 2012-08-07 08:50:53
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&
換句話說:'\\&'
只包含一個反斜槓。爲了清晰起見,它只是在python shell的輸出中轉義出來。
Python以特殊的方式在文字字符串中對待\
。
這樣,您可以鍵入'\n'
意味着換行符或'\t'
意味着標籤
由於'\&'
並不意味着什麼特殊到Python,而不是導致錯誤,Python的詞法分析器隱含增加了額外的\
您。
實際上它是更好地使用或代替\\&
r'\&'
'\&'
的r
這裏指原始字符串和手段,\
不經過特殊處理,除非它在的開始引號字符前右是串。
在交互式控制檯中,Python使用repr
來顯示結果,所以這就是您看到雙「\」的原因。如果您print
您的字符串或使用len(string)
你會發現它真的是隻有2個字符
一些例子
>>> 'Here\'s a backslash: \\'
"Here's a backslash: \\"
>>> print 'Here\'s a backslash: \\'
Here's a backslash: \
>>> 'Here\'s a backslash: \\. Here\'s a double quote: ".'
'Here\'s a backslash: \\. Here\'s a double quote: ".'
>>> print 'Here\'s a backslash: \\. Here\'s a double quote: ".'
Here's a backslash: \. Here's a double quote ".
澄清這一點彼得使得在他的評論中看到this link
不像標準C,所有無法識別的 轉義序列保留在 字符串中不變,即反斜槓 保留在字符串中。(這在調試時行爲 是有用:如果一個轉義 序列被錯誤地輸入時,所得 輸出被更容易地認爲是 折斷。)同樣重要的是要注意 該轉義序列標記爲 「(Unicode的只)」在 以上的表中屬於無法識別的 轉義爲非Unicode字符串 文字。
部分內容不正確。 Python不會*「爲你隱式添加額外的'\'。但是,當您顯示字符串的repr()輸出時(如提示時那樣),它確實會加倍反斜槓,純粹是爲了演示目的。 len(「\&」)只有2,證明沒有隱含的數據傳輸(謝天謝地!)。 – 2010-02-01 22:10:21
@PeterHansen我認爲OP指出通常應該在非原始字符串中轉義黑色閃爍,所以通常會寫入兩倍。 – 2015-10-28 19:45:33
打印列表也可能導致此問題(在蟒蛇即時通訊新的,所以弄得我有點太):
>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\
相似:約蟒蛇
>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
- 1. Python re.split()轉義反斜槓
- 2. 反斜槓「\」轉義
- 3. 在Python請求中轉義反斜槓
- 4. 在沒有轉義反斜槓的情況下在MySQL中存儲windows路徑
- 5. 轉義反斜槓在elisp
- 6. mysqli_real_escape_string(),不添加反斜槓
- 7. 在沒有添加反斜槓的情況下在Zend Framework中將字符串轉義並存儲到mysql
- 8. 在javascript中轉義反斜槓打印兩個反斜槓
- 9. PHP 5.3.1在默認情況下是否添加一個斜槓(「\」)?
- 10. NSString反斜槓轉義
- 11. 捲曲添加反斜槓
- 12. 在什麼情況下尖括號用反斜槓逃脫?
- 13. 在NSTask參數中轉義反斜槓?
- 14. 在SQL Server GRANT中轉義反斜槓
- 15. 在URL中轉義點和反斜槓
- 16. 在Postgresql中轉義反斜槓
- 17. Python rstrip反斜槓
- 18. PHP代碼在正斜槓前添加反斜槓
- 19. ANTLR中的轉義反斜槓
- 20. JSON.encode正在添加反斜槓
- 21. JSON stringify正在添加反斜槓
- 22. MySQL添加額外的反斜槓?
- 23. NSPredicate轉義反斜槓字符
- 24. Neo4j導入工具反斜槓轉義
- 25. 防止sqlite轉義反斜槓
- 26. 如何爲MathJax轉義雙反斜槓?
- 27. 反斜槓的意義?
- 28. Python將斜槓轉換爲正斜槓
- 29. Python的轉義反斜線
- 30. 轉義單斜槓和雙斜槓
知道小人物:字符串= string.replace('&','&')...也許替換方法會跳過你的&符號... heh – iandisme 2010-02-01 19:43:27
如果你仍然使用它,請標記一個解決方案! – erikbwork 2012-08-07 08:51:16
@Veedrac:這個4歲的問題如何標記爲6天前問的問題的重複? – User 2014-06-12 15:46:25