繁体   English   中英

Python正则表达式用单反斜杠替换双反斜杠

[英]Python regex to replace double backslash with single backslash

我试图用一个反斜杠替换所有双反斜杠。 我想用'class=\\\\"highlight'替换'class=\\\\"highlight' 'class=\\"highlight' 我认为 python 将'\\\\'视为一个反斜杠,将r'\\\\+'视为带有两个反斜杠的字符串。 但是当我尝试

In [5]: re.sub(r'\\+', '\\', string)
sre_constants.error: bogus escape (end of line)

所以我尝试用原始字符串切换替换字符串:

In [6]: re.sub(r'\\+', r'\\', string)
Out [6]: 'class=\\"highlight'

这不是我需要的。 所以我只在原始字符串中尝试了一个反斜杠:

In [7]: re.sub(r'\\+', r'\', string)
SyntaxError: EOL while scanning string literal    

为什么不使用string.replace()

>>> s = 'some \\\\ doubles'
>>> print s
some \\ doubles
>>> print s.replace('\\\\', '\\')
some \ doubles

或者使用“原始”字符串:

>>> s = r'some \\ doubles'
>>> print s
some \\ doubles
>>> print s.replace('\\\\', '\\')
some \ doubles

由于转义字符很复杂,您仍然需要对其进行转义,以便它不会转义'

你在字符串中只有一个反斜杠:

>>> string = 'class=\\"highlight' 
>>> print string
class=\"highlight

现在让我们再放一个

>>> string = 'class=\\\\"highlight' 
>>> print string
class=\\"highlight

然后再次删除它

>>> print re.sub('\\\\\\\\', r'\\', string)
class=\"highlight

我刚刚意识到这可能是最简单的答案:

import os
os.getcwd()

以上输出带有\\(2个反斜杠)的路径

但是如果你用打印函数包装它,即print(os.getcwd())它将输出 2 条斜线和 1 条斜线,这样你就可以复制并粘贴到地址栏中!

只需使用 .replace() 两次!

我有以下路径: C:\\\\Users\\\\XXXXX\\\\Desktop\\\\PMI APP GIT\\\\pmi-app\\\\niton x5 test data

要将 \\ 转换为单个反斜杠,我只执行了以下操作:

path_to_file = path_to_file.replace('\\','*')
path_to_file = path_to_file.replace('**', '\\')

第一个操作为每个 \\ 创建 ** ,第二个操作转义第一个斜杠,用单个\\替换 ** 。

结果:

C:**Users**z0044wmy**Desktop**PMI APP GIT**pmi-app**GENERATED_REPORTS
C:\Users\z0044wmy\Desktop\PMI APP GIT\pmi-app\GENERATED_REPORTS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM