コードは以下のとおりです。
line = r'abc\def\n'
rline = re.sub('\\\\', '+', line) # then rline should be r'abc+def+n'
どうやら、バックスラッシュを「+」に置き換えたいだけです。私が考えたのは、行内のバックスラッシュは '\' と表現できるということでした。
よくわかりません。
正規表現パターンを扱うときは常に生の文字列を使用するのは良い習慣です:
In [45]: re.sub(r'\\', r'+', line)
Out[45]: 'abc+def+n'
ただし、質問に答えるために、Python は'\\\\'
2 つのバックスラッシュ文字として解釈します。
In [44]: list('\\\\')
Out[44]: ['\\', '\\']
また、正規表現の規則では、2 つのバックスラッシュ文字が 1 つのリテラル バックスラッシュとして解釈されます。
バックスラッシュには 2 つのレベルがあるためです。
だから\\\\
(python) -> \\
(re.sub) ->\
編集
そしてバックスラッシュのSOレベル!(それは私を手に入れました!)
実際の正規表現ではなくリテラル パターンを検索する場合は、生の文字列の両方を使用し、re.escape()
バックスラッシュの二重化やその他の手動による完全なエスケープを回避する必要があります。
したがって、あなたの例は次のようになります。
line = r'abc\def\n'
backslash = re.escape(r'\')
rline = re.sub(backslash, '+', line)