关于字符串:python用双反斜杠替换单反斜杠

python replace single backslash with double backslash

在python中,我尝试将单反斜杠(" \\\\")替换为双反斜杠(" \\\\")。我有以下代码:

1
directory = string.replace("C:\\Users\\Josh\\Desktop\\20130216","","\")

但是,这会给出一条错误消息,表明它不喜欢双反斜杠。谁能帮忙吗?


这里不需要使用str.replacestring.replace,只需将该字符串转换为原始字符串即可:

1
2
3
4
>>> strs = r"C:\\Users\\Josh\\Desktop\\20130216"
           ^
           |
       notice the 'r'

下面是上述字符串的repr版本,因此在这里看到\\\\的原因。
但是,实际上实际的字符串仅包含'\\'而不是\\\\

1
2
3
4
5
6
7
8
>>> 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

但是当您要打印此字符串时,输出中将不会得到'\\\\'

1
2
>>> print strs
C:\\Users\\Josh\\Desktop\\20130216

如果希望字符串在print中显示'\\\\',请使用str.replace

1
2
3
>>> new_strs = strs.replace('\\\','\\\\\\\')
>>> print new_strs
C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216

repr版本现在将显示\\\\\\\\

1
2
>>> new_strs
'C:\\\\\\\\Users\\\\\\\\Josh\\\\\\\\Desktop\\\\\\\\20130216'


让我简单明了。让我们在python中使用re模块来转义特殊字符。

Python脚本:

1
2
3
4
import re
s ="C:\\Users\\Josh\\Desktop"
print s
print re.escape(s)

输出:

1
2
C:\\Users\\Josh\\Desktop
C:\\\\Users\\\\Josh\\\\Desktop

说明:

现在观察一下re.escape函数如何转义给定字符串中的特殊字符,我们能够在每个反斜杠之前添加另一个反斜杠,最后输出结果是双反斜杠,即所需的输出。

希望这对您有所帮助。


使用转义字符:"full\\\\path\\\\here""\\""\\\\\\"


在python中,\\(反斜杠)用作转义字符。这意味着在您希望插入特殊字符(例如换行符)的地方,您将使用反斜杠和另一个字符(对于换行符为\
)

使用示例字符串,您会注意到,当将"C:\\Users\\Josh\\Desktop\\20130216"放入REPL中时,您将得到"C:\\\\Users\\\\Josh\\\\Desktop\\x8130216"。这是因为\\2在python字符串中具有特殊含义。如果要指定\\,则需要在字符串中放置两个\\\\

"C:\\\\Users\\\\Josh\\\\Desktop\\\\28130216"

另一种选择是通过在字符串前添加r

来通知python您的整个字符串不得使用\\作为转义字符

r"C:\\Users\\Josh\\Desktop\\20130216"

这是一个"原始"字符串,在需要使用大量反斜杠(例如正则表达式字符串)的情况下非常有用。

如果您仍然希望将单个\\替换为\\\\,则可以使用:

directory = string.replace(r"C:\\Users\\Josh\\Desktop\\20130216","\\","\\\\\\")

请注意,我在上面的最后两个字符串中没有使用r'。这是因为,当您使用字符串的r'形式时,您不能使用单个\\

结束该字符串

为什么Python的原始字符串文字不能以单个反斜杠结尾?

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-—-backslashes-are-escape-characters/


您的情况可能是语法错误,
您可以将行更改为:

1
directory = str(r"C:\\Users\\Josh\\Desktop\\20130216").replace('\\\','\\\\\\\')

为您提供正确的以下输出:

1
C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216

您可以使用

1
os.path.abspath(path_with_backlash)

它用\\

返回路径


反斜杠表示特殊的转义字符。因此,directory = path_to_directory.replace("","\\")会导致Python认为替换的第一个参数直到第二个参数的引号才结束,因为它将终止引号理解为转义字符。

1
directory=path_to_directory.replace("\","\\\\\")

给出源字符串,使用os.path可能更有意义,但这是一个字符串解决方案;

1
2
3
>>> s=r"C:\\Users\\Josh\\Desktop\\\\20130216"
>>> '\\\\\\\'.join(filter(bool, s.split('\\\')))
'
C:\\\\\\\\Users\\\\\\\\Josh\\\\\\\\Desktop\\\\\\\\20130216'

请注意,split将源字符串中的\\\\视为带分隔符的空字符串。使用filter摆脱了那些空字符串,因此join不会使已经加倍的反斜杠加倍。不幸的是,如果您有3个或更多,它们会减少到双倍的反斜杠,但我认为Windows路径表达式中的斜杠不会对您造成伤害。


使用:

1
string.replace(r"C:\\Users\\Josh\\Desktop\\20130216","\","\")

转义\\字符。