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

Dr.*_*son 28 python string replace escaping

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

Emi*_*nov 59

结果'\\&'仅显示 - 实际上字符串是\&:

>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
Run Code Online (Sandbox Code Playgroud)

在shell中试一试.

  • 为什么这不标记为解决方案? (9认同)
  • OP 需要的文字字符串是 ''\&'` 而不是 ''\\&'`。 (3认同)

Tho*_*mas 24

实际上没有添加额外的反斜杠; 它只是由repr()函数添加,表明它是一个字面反斜杠.当需要打印表达式的结果时,Python解释器使用repr()函数(调用__repr__()对象):

>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 19

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 ".
Run Code Online (Sandbox Code Playgroud)

澄清彼得在评论中提出的观点,请看这个链接

与标准C不同,所有未识别的转义序列都保留在字符串中不变,即反斜杠保留在字符串中.(调试时此行为很有用:如果转义序列输入错误,则生成的输出更容易被识别为已损坏.)请注意,上表中标记为"(仅限Unicode)"的转义序列属于非Unicode字符串文字的无法识别的转义类别.


sep*_*p2k 9

>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&
Run Code Online (Sandbox Code Playgroud)

换句话说:'\\&'只包含一个反斜杠.为了清晰起见,它只是在python shell的输出中转义.


Kic*_*csi 6

打印列表也会导致此问题(即时消息是python中的新增功能,因此也让我有些困惑):

>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\ 
Run Code Online (Sandbox Code Playgroud)

类似地:

>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

没有多余的反斜杠,它只是在交互式环境中以这种方式格式化。尝试:

print string
Run Code Online (Sandbox Code Playgroud)

然后您可以看到确实没有多余的反斜杠。