x = r'\[GOOD\]'
print(len(x)) # prints 8
print(x[0]) # prints a backslash
文字列にはバックスラッシュが含まれています。
ただし、パターンはバックスラッシュと一致しません。正規表現では、バックスラッシュはそれに続くものを変更します。この例では、バックスラッシュが の特別な機能を無効にしています[
。
したがって、正規表現はリテラル string と一致するだけ[GOOD]
です。しかしx
、バックスラッシュのため、あなたにはその文字列が含まれていません。
ターゲット文字列に単純に含める[GOOD]
場合は、バックスラッシュを削除します。
y = r'it made me feel [GOOD]'
検索文字列がターゲット文字列のバックスラッシュと一致するようにするには、パターンを変更する必要があります。これはうまくいきます:
x = r'..GOOD..' # use dot to match anything
しかし、実際に正規表現のバックスラッシュと正確に一致させるには、バックスラッシュを 2 つ使用します。バックスラッシュは、それに続く文字を変更する特殊文字であるため、バックスラッシュを取得するには、それを 2 倍にします。
x = r'\\.GOOD.\\' match actual backslashes; use dot to match square braces
したがって\\
、バックスラッシュと\[
左角括弧および右角括弧を一致させるために使用します\]
。すべてをまとめる:
x = r'\\\[GOOD\]\\'
ただし、ここでは正規表現の特別な機能を使用していません。これは、1 つのリテラル文字列に一致する単なる正規表現です。
ところで、Python の「生の文字列」の機能はここで便利です。通常の文字列では、バックスラッシュを 1 つにするにはバックスラッシュを 2 つにする必要があります。したがって、通常の文字列を使用してパターンを記述するには、バックスラッシュを 2 倍にする必要があります。
x = '\\\\\\[GOOD\\]\\\\' # note not a raw string
うん!