Python 带有双反斜杠的正则表达式处理

Python 带有双反斜杠的正则表达式处理,python,regex,Python,Regex,字符串是G:\\one\\two\\three.htm,我想要的结果是G/one/two/three.htm,如何使用python和regex获得所需的结果? 我试过re.sub('.'.'.'.'/',string),它成功了,但是离开了:。我不想再次使用正则表达式来删除:。谁能帮我解决上述问题?我建议,如果不懂python的话 re.sub(':?\\+', '/', string) 这里可能不需要正则表达式: >>> s = r"G:\\one\\two\\three.

字符串是
G:\\one\\two\\three.htm
,我想要的结果是
G/one/two/three.htm
,如何使用python和regex获得所需的结果?

我试过
re.sub('.'.'.'.'/',string)
,它成功了,但是离开了
。我不想再次使用正则表达式来删除
。谁能帮我解决上述问题?

我建议,如果不懂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
之前),这样我就不必转义所有的反斜杠,并且
count
选项
replace
在第一个冒号之外保留冒号,以防它们是文件名的一部分


[我不得不承认,我有点惊讶于
G/one/two/three.htm
确实是您想要的。]

这是@Matthias的答案,适用于Python:

In [6]: re.sub(r':?\\+', '/', r'G:\\one\\two\\three.htm')
Out[6]: 'G/one/two/three.htm'
注意正则表达式模式是
r':?\\+'
,而不是
':?\\+'

r
告诉Python下面是一个原始字符串

Python将
':?\\+'
解释为带有一个反斜杠的字符串:

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
如上所述,使用
list
可以查看字符串中的单个字符。
'\\'
是一个由一个反斜杠组成的Python字符串

Python将
r':?\\+'
解释为带有两个反斜杠的字符串:

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
In [9]: list(':?\\\\\\\\')
Out[9]: [':', '?', '\\', '\\', '\\', '\\']

:?
之所以对您有效,是因为Python将其解释为带有四个反斜杠的字符串:

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
In [9]: list(':?\\\\\\\\')
Out[9]: [':', '?', '\\', '\\', '\\', '\\']

然后,正则表达式引擎将每两个反斜杠解释为与一个文本反斜杠匹配的模式。因此,正则表达式将四个反斜杠解释为与两个文本反斜杠匹配的模式。

+1…作为日志,因为可以将
G:\\foo:\\bar
转换为
G/foo/bar
,这对我来说很好。对于UNC路径,例如\\\\myServer\\myDir\\mySubDir\\