用斜杠 / 替换 Python 中的 \\

5

这个不起作用:

import re
re.sub('\\', '/', "C:\\Users\\Judge")

错误:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    re.sub('\\', '/', "C:\\Users")
  File "C:\Python27\lib\re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "C:\Python27\lib\re.py", line 244, in _compile
    raise error, v # invalid expression
error: bogus escape (end of line)
6个回答

7
尝试使用两个反斜杠进行转义: \\\\ re.sub('\\\\', '/', "C:\\Users\\Judge") 您只传递了一个反斜杠给 RE 引擎,这使它感到困惑。因此,不仅需要为 Python 转义反斜杠,还需要为 RE 再次转义。由于您正在转义两个反斜杠,因此总共需要四个。
如果您没有使用任何正则表达式功能,也许最好使用字符串的更简单的 replace 方法: 'C:\\Users\\Judge'.replace('\\', '/')

为什么它不能将它作为原始字符串处理?这对我来说毫无意义! - chaz

4

对于这么简单的替换,您不需要使用正则表达式。并且引用变得更加容易:

"C:\\Users\\Judge".replace("\\", "/")

2

您也可以使用原始字符串:

re.sub(r'\\', '/', 'C:\\Users')

注意在搜索字符串前面的r,它与普通字符串不同地解释反斜杠。也就是说,像\n这样的控制序列将被视为字面意义上的反斜杠后跟着n,而不是一个换行符。

2
这是正确的方法。请注意,即使是原始字符串也不能以奇数个反斜杠结尾。 - agf

1
"C:\\Users\\Judge".replace('\\', '/')

关于正则表达式模式,使用r'\\'

1
假设您想要规范化您的路径,而不仅仅是一般性地询问如何将反斜杠转换为正斜杠,那么您可以使用path.normpath()。尽管它可能无法完全按照您的期望工作,因为您试图从Windows格式转换,但请考虑以下示例:
import os2emxpath as path
print path.normpath("C:\\windows\\hello")

打印

C:/windows/hello

编辑 正如Oben在评论中指出的那样,带反斜杠的字符串是Windows系统下的正确形式,因此它应该适用于大多数情况。但是,如果您想将其转换为其他形式,您可以导入相应的路径模块。


1
根据文档,该函数会折叠冗余的分隔符,在Windows系统上斜杆会被转换为反斜杠(但反过来不行)。 - Oben Sonne
@Oben 是的,但你可以假装自己不在Windows上,并导入相应的模块。毕竟这就是提问者建议的做法,因为我们为什么要破坏一个在Windows上能很好工作的目录字符串呢? - Gleno
Gleno,不要误会,os.path.normpath通常是一个好的推荐工具。然而,根据问题本身,OP并没有提供太多上下文信息,因此normpath并不是解决方案。此外,导入os2emxpath来强制使用正斜杠也有点不太规范。如果OP澄清他确实正在寻找normpath规范化,我愿意撤销我的负评。 - Oben Sonne

1

你需要使用\\\\

re.sub('\\\\', '/', "C:\\Users\\Judge")

或者使用r修饰符:

re.sub(r'\\', '/', "C:\\Users\\Judge")

请查看 Python re 文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接