我需要转义字符串中的&
(与号)字符。问题是我结果是'\\&'
。额外的反斜杠被添加来逃避原始的反斜杠。我如何删除这个额外的反斜杠?在不转义的情况下添加反斜杠[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. mysqli_real_escape_string(),不添加反斜杠
- 6. PHP 5.3.1在默认情况下是否添加一个斜杠(“\”)?
- 7. NSString反斜杠转义
- 8. 在什么情况下尖括号用反斜杠逃脱?
- 9. 在URL中转义点和反斜杠
- 10. 在Postgresql中转义反斜杠
- 11. PHP代码在正斜杠前添加反斜杠
- 12. ANTLR中的转义反斜杠
- 13. JSON.encode正在添加反斜杠
- 14. JSON stringify正在添加反斜杠
- 15. MySQL添加额外的反斜杠?
- 16. Neo4j导入工具反斜杠转义
- 17. 如何为MathJax转义双反斜杠?
- 18. 防止sqlite转义反斜杠
- 19. 反斜杠的意义?
- 20. Python的转义反斜线
- 21. NodeJS转义斜杠
- 22. 去除python中bash脚本的反斜杠转义
- 23. jQuery添加反斜杠属性
- 24. JSON自动添加反斜杠
- 25. 试图在C#中将反斜杠添加为MySql插入语句的转义
- 26. 蟒蛇代替反斜杠反斜杠
- 27. Stringbuilder在将其转换为字符串后添加反斜杠
- 28. Python重新替换添加额外的反斜杠字符
- 29. XML到JSON转换似乎添加额外的反斜杠
- 30. net.sf.json.JSONObject在不期望的位置添加反斜杠?
知道小人物:字符串= 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