回答:
re.escape()
このための関数を使用します。
エスケープ(文字列)
英数字以外のすべてのバックスラッシュを含む文字列を返します。これは、正規表現のメタ文字が含まれている可能性がある任意のリテラル文字列に一致させる場合に便利です。
単純な例として、提供された文字列の出現を検索し、オプションで「s」を続けて、一致オブジェクトを返します。
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
re.escape()を使用できます:
re.escape(string)すべての非英数字がバックスラッシュされた文字列を返します。これは、正規表現のメタ文字が含まれている可能性がある任意のリテラル文字列に一致させる場合に便利です。
>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
残念ながら、re.escape()
置換文字列には適していません:
>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'
解決策は、置換をラムダに入れることです:
>>> re.sub('a', lambda _: '_', 'aa')
'__'
ラムダの戻り値はre.sub()
リテラル文字列として扱われるためです。
repl
引数は単純な文字列ではなく、解析されます。たとえば、ではなくre.sub(r'(.)', r'\1', 'X')
が返されます。X
\1
repl
:引数をstackoverflow.com/q/49943270/247696
repl
引数re.sub
は文字列であり、正規表現ではありません。それに適用re.escape
しても、そもそも意味がありません。