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

mil*_*ill 2 python regex

我试图用一个反斜杠替换所有双反斜杠.我想用'class = \"highlight'替换'class = \\'highlight'.我认为python将'\\'视为一个反斜杠,将r'\\ +'视为带有两个反斜杠的字符串(这些是带有SO转义的3和4个反斜杠).但是,当我尝试

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

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

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

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

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

Inb*_*ose 9

为什么不用string.replace()

>>> s = 'some \\\\ doubles'
>>> print s
some \\ doubles
>>> print s.replace('\\\\', '\\')
some \ doubles
Run Code Online (Sandbox Code Playgroud)

或者使用"原始"字符串:

>>> s = r'some \\ doubles'
>>> print s
some \\ doubles
>>> print s.replace('\\\\', '\\')
some \ doubles
Run Code Online (Sandbox Code Playgroud)

由于转义字符很复杂,你仍然需要将其转义,因此它不会逃脱 '

  • 抱歉,这不起作用。Original_string = 'class=\\"highlight'; new_string = original_string.replace('\\\\', '\\'); new_string => 'class=\\"highlight'. print 语句删除双反斜杠,而不是替换。事实上,只需执行 print original_string => 'class=\"highlight' 以及 print new_string => 'class=\"highlight' 即可。您还可以使用 new_string == Original_string => True 来确认这一点 (6认同)
  • 这适用于印刷品,但并非没有印刷品。打印 s.replace('\\\\', '\\') => some \ doubles 。但是 s.replace('\\\\', '\\') => some \\ doubles (2认同)