3

コードは以下のとおりです。

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

どうやら、バックスラッシュを「+」に置き換えたいだけです。私が考えたのは、行内のバックスラッシュは '\' と表現できるということでした。

よくわかりません。

4

3 に答える 3

7

正規表現パターンを扱うときは常に生の文字列を使用するのは良い習慣です:

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

ただし、質問に答えるために、Python は'\\\\'2 つのバックスラッシュ文字として解釈します。

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

また、正規表現の規則では、2 つのバックスラッシュ文字が 1 つのリテラル バックスラッシュとして解釈されます。

于 2011-08-16T11:25:23.757 に答える
4

バックスラッシュには 2 つのレベルがあるためです。

  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 に答える