添加反斜杠而不转义
我需要在一个字符串中处理一个 &
(也就是“和”符号)字符。问题是每当我用 string = string.replace ('&', '\&')
进行替换时,结果变成了 '\\&'
。多了一个反斜杠,是为了转义原来的反斜杠。我该怎么去掉这个多余的反斜杠呢?
6 个回答
在Python中,\
这个符号在字符串中有特别的用法。
这意味着你可以输入'\n'
来表示换行,或者'\t'
来表示制表符(也就是Tab键)。
而像'\&'
这样的组合对Python来说没有特别的意义,所以Python会自动帮你加上一个额外的\
,这样就不会出错了。
其实,使用\\&
或者r'\&'
会更好,而不是直接用'\&'
。
这里的r
表示“原始字符串”,意思是\
不会被特别处理,除非它出现在字符串开头的引号前面。
在交互式控制台中,Python用repr
来显示结果,所以你会看到两个\
。如果你用print
输出你的字符串,或者用len(string)
来查看长度,你会发现其实只有两个字符。
以下是一些例子:
>>> '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 ".
为了更清楚地说明彼得在评论中提到的观点,可以查看这个链接
与标准C不同,所有未识别的转义序列在字符串中保持不变,也就是说,反斜杠会保留在字符串中。(这种行为在调试时很有用:如果转义序列写错了,输出结果更容易被识别为错误。)还需要注意的是,上表中标记为“(仅限Unicode)”的转义序列,对于非Unicode字符串字面量来说,属于未识别的转义序列。
多出来的反斜杠其实并不是被真正添加上去的;它只是由 repr()
函数加上的,用来表示这是一个字面上的反斜杠。当我们需要打印一个表达式的结果时,Python 解释器会使用 repr()
函数(这个函数会调用对象的 __repr__()
方法)。
>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
结果 '\\&'
只是显示出来的,实际上这个字符串是 \&
:
>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
你可以在命令行中试试看。