这个字符串是 G:\\one\\two\\three.htm
,我想要的结果是 G/one/two/three.htm
,我应该如何使用 Python 和正则表达式得到期望的结果?
我尝试了 re.sub('\\\\\\\\', '/', string)
,它起作用了,但留下了一个 :
。我不想再用正则表达式来去掉 :
,谁能帮我解决上述问题?
这是@Matthias的答案,适用于Python:
In [6]: re.sub(r':?\\+', '/', r'G:\\one\\two\\three.htm')
Out[6]: 'G/one/two/three.htm'
r':?\\+'
,而不是':?\\+'
。
r
告诉Python后面的内容是原始字符串。':?\\+'
解释为一个带有一个反斜杠的字符串:In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
list
,如上所述,可以让您看到字符串中的单个字符。'\\'
是由一个反斜杠组成的Python字符串。r':?\\+'
解释为带有两个反斜杠的字符串:In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
为什么':?\\\\\\\\'
对你有效呢?因为Python将其解释为一个带有四个反斜杠的字符串:
In [9]: list(':?\\\\\\\\')
Out[9]: [':', '?', '\\', '\\', '\\', '\\']
如果不了解Python,我建议:
re.sub(':?\\+', '/', string)
在这里,你可能不需要使用正则表达式:
>>> s = r"G:\\one\\two\\three.htm"
>>> print s
G:\\one\\two\\three.htm
>>> s.replace(r"\\","/")
'G:/one/two/three.htm'
>>> s.replace(r"\\","/").replace(":","",1)
'G/one/two/three.htm'
r
)以便不必转义所有反斜杠,并且使用replace
中的count
选项,以留下除第一个冒号外的任何冒号,以防它们是文件名的一部分。G/one/two/three.htm
确实是您想要的。]
G:\\foo:\\bar
转换为G/foo/bar
是可以的,这看起来对我来说很好。**+1** - ghoti