我需要在字符串中转义&
(&符号)字符。问题是,只要我string = string.replace ('&', '\&')
结果为'\\&'
。添加额外的反斜杠以逃避原始反斜杠。如何删除这个额外的反斜杠?
答案 0 :(得分:58)
仅显示结果'\\&'
- 实际上字符串为\&
:
>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
在shell中试用。
答案 1 :(得分:22)
实际上没有添加额外的反斜杠;它只是由repr()
函数添加,表明它是一个字面反斜杠。当需要打印表达式的结果时,Python解释器使用repr()
函数(在对象上调用__repr__()
):
>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
答案 2 :(得分:18)
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字符串 文字。
答案 3 :(得分:7)
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&
或者换句话说:'\\&'
只包含一个反斜杠。为了清晰起见,它只是在python shell的输出中进行了转义。
答案 4 :(得分:5)
没有额外的反斜杠,它只是在交互式环境中以这种方式格式化。尝试:
print string
然后你可以看到确实没有额外的反斜杠。
答案 5 :(得分:5)
打印列表也会导致这个问题(我在python中是新的,所以它让我有点困惑):
>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\
类似地:
>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&