在python中,我试图用双反斜杠(“\”)替换单个反斜杠(“\”)。我有以下代码:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
但是,这会给出一条错误消息,说它不喜欢双反斜杠。有人可以帮忙吗?
答案 0 :(得分:44)
此处无需使用str.replace
或string.replace
,只需将该字符串转换为原始字符串即可:
>>> strs = r"C:\Users\Josh\Desktop\20130216"
^
|
notice the 'r'
以下是上述字符串的repr
版本,这就是您在此处看到\\
的原因。
但实际上,实际字符串只包含'\'
而不是\\
。
>>> strs
'C:\\Users\\Josh\\Desktop\\20130216'
>>> s = r"f\o"
>>> s #repr representation
'f\\o'
>>> len(s) #length is 3, as there's only one `'\'`
3
但是当你要打印这个字符串时,你不会在输出中得到'\\'
。
>>> print strs
C:\Users\Josh\Desktop\20130216
如果您希望字符串在'\\'
期间显示print
,请使用str.replace
:
>>> new_strs = strs.replace('\\','\\\\')
>>> print new_strs
C:\\Users\\Josh\\Desktop\\20130216
repr
版本现在会显示\\\\
:
>>> new_strs
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
答案 1 :(得分:10)
让我简单明了。让我们使用python中的re模块来转义特殊字符。
Python脚本:
import re
s = "C:\Users\Josh\Desktop"
print s
print re.escape(s)
输出:
C:\Users\Josh\Desktop
C:\\Users\\Josh\\Desktop
说明:
现在观察 re.escape 函数在转义给定字符串中的特殊字符时我们能够在每个反斜杠之前添加另一个反斜杠,最后输出结果是双反斜杠,所需的输出
希望这会对你有所帮助。
答案 2 :(得分:8)
使用转义字符:"full\\path\\here"
,"\\"
和"\\\\"
答案 3 :(得分:3)
在python中(my-even? 2) ; ==>
((comp not odd?) 2) ; ==>
(((lambda (x) (not (odd? x))) 2) ; ==>
(not (odd? 2)) ; ==>
(not #f) ; ==>
#t
(反斜杠)用作转义字符。这意味着在您希望插入特殊字符(例如换行符)的地方,您将使用反斜杠和另一个字符(换行符为var request = URLRequest(url: url!)
request.httpMethod = "POST"
let postString = "Message=" + (self.message.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed))!
request.httpBody = postString.data(using: String.Encoding.utf8, allowLossyConversion: true)
)
通过您的示例sting,您会注意到当您将\
放入repl时,您将获得\n
。这是因为"C:\Users\Josh\Desktop\20130216"
在python sting中有特殊含义。如果您希望指定"C:\\Users\\Josh\\Desktop\x8130216"
,则需要在字符串中放置两个\2
。
\
另一个选择是通过预先通过\\
"C:\\Users\\Josh\\Desktop\\28130216"
作为转义字符
\
这是" raw" string,在需要使用大量反斜杠的情况下非常有用,例如使用正则表达式stings。
如果您仍希望将r
替换为r"C:\Users\Josh\Desktop\20130216"
,则可以使用:
\
注意我在上面的最后两个叮咬中没有使用\\
。这是因为,当您使用directory = string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\\\")
形式的叮咬时,您无法使用单个r'
Why can't Python's raw string literals end with a single backslash?
答案 4 :(得分:0)
在您的情况下可能是语法错误, 您可以将该行更改为:
directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')
为您提供正确的以下输出:
C:\\Users\\Josh\\Desktop\\20130216
答案 5 :(得分:0)
鉴于源字符串,使用os.path进行操作可能更有意义,但这是一个字符串解决方案;
>>> s=r"C:\Users\Josh\Desktop\\20130216"
>>> '\\\\'.join(filter(bool, s.split('\\')))
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
请注意,split
将源字符串中的\\
视为分隔的空字符串。使用filter
删除那些空字符串,以便join
不会使已经加倍的反斜杠加倍。不幸的是,如果你有3个或更多,他们会减少加倍反斜杠,但我不认为这会在windows路径表达中伤害你。
答案 6 :(得分:0)
反斜杠表示一个特殊的转义字符。因此,directory = path_to_directory.replace("\", "\\")
会导致Python认为替换的第一个参数直到第二个参数的开始引用才结束,因为它将结束引用理解为转义字符。
directory=path_to_directory.replace("\\","\\\\")
答案 7 :(得分:0)
您可以使用
os.path.abspath(path_with_backlash)
它返回带有\
答案 8 :(得分:-3)
使用:
string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\")
转义\
字符。