3

代码如下:

line = r'abc\def\n'
rline = re.sub('\\\\', '+', line) # then rline should be r'abc+def+n'

显然,我只想将反斜杠替换为“+”。我认为行中的反斜杠可以表示为'\',那么我为什么要使用'\\'来让re.sub正常工作。

我很困惑。

4

3 回答 3

7

在处理正则表达式模式时,始终使用原始字符串是一个好习惯:

In [45]: re.sub(r'\\', r'+', line)
Out[45]: 'abc+def+n'

不过,要回答您的问题,Python 会解释'\\\\'为两个反斜杠字符:

In [44]: list('\\\\')
Out[44]: ['\\', '\\']

并且正则表达式的规则将两个反斜杠字符解释为一个文字反斜杠。

于 2011-08-16T11:25:23.757 回答
4

因为有两个级别的反斜杠:

  1. re.sub 使用 \ 作为转义
  2. Python 使用 \ 作为转义符(除非你使用 r'...')

所以\\\\(python)-> \\(re.sub)->\

编辑

以及反斜杠的SO级别!(它抓住了我!)

于 2011-08-16T11:26:06.097 回答
2

如果要搜索文字模式,而不是实际的正则表达式,则应同时使用原始字符串并re.escape()避免加倍反斜杠或任何其他手动完全转义。

因此,您的示例将变为:

line = r'abc\def\n'
backslash = re.escape(r'\')
rline = re.sub(backslash, '+', line)
于 2011-08-16T11:37:38.990 回答