添加反斜杠而不转义[Python]

时间:2010-02-01 19:38:10

标签: python string replace escaping

我需要在字符串中转义&(&符号)字符。问题是,只要我string = string.replace ('&', '\&')结果为'\\&'。添加额外的反斜杠以逃避原始反斜杠。如何删除这个额外的反斜杠?

6 个答案:

答案 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)
\&