代码如下:
line = r'abc\def\n'
rline = re.sub('\\\\', '+', line) # then rline should be r'abc+def+n'
显然,我只想将反斜杠替换为“+”。我认为行中的反斜杠可以表示为'\',那么我为什么要使用'\\'来让re.sub正常工作。
我很困惑。
在处理正则表达式模式时,始终使用原始字符串是一个好习惯:
In [45]: re.sub(r'\\', r'+', line)
Out[45]: 'abc+def+n'
不过,要回答您的问题,Python 会解释'\\\\'
为两个反斜杠字符:
In [44]: list('\\\\')
Out[44]: ['\\', '\\']
并且正则表达式的规则将两个反斜杠字符解释为一个文字反斜杠。
因为有两个级别的反斜杠:
所以\\\\
(python)-> \\
(re.sub)->\
编辑
以及反斜杠的SO级别!(它抓住了我!)
如果要搜索文字模式,而不是实际的正则表达式,则应同时使用原始字符串并re.escape()
避免加倍反斜杠或任何其他手动完全转义。
因此,您的示例将变为:
line = r'abc\def\n'
backslash = re.escape(r'\')
rline = re.sub(backslash, '+', line)