正则表达式处理双反斜杠

时间:2012-12-16 14:16:54

标签: python regex

字符串是G:\\one\\two\\three.htm,我想要的结果是G/one/two/three.htm,如何使用python和regex获得所需的结果?
我尝试了re.sub('\\\\\\\\', '/', string),但它有效但留下了:。我不想再使用正则表达式删除:。谁可以帮助我解决上述问题?

3 个答案:

答案 0 :(得分:7)

这是@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]: [':', '?', '\\', '\\', '+']

':?\\\\\\\\'为你工作的原因是因为Python将它解释为带有四个反斜杠的字符串:

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

正则表达式引擎然后将每两个反斜杠解释为匹配一个文字反斜杠的模式。所以正则表达式将四个反斜杠解释为匹配两个字面反斜杠的模式。

答案 1 :(得分:3)

不知道python,我建议

re.sub(':?\\+', '/', string)

答案 2 :(得分:3)

您可能不需要正则表达式:

>>> 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确实是你想要的,我有点惊讶。]