home changes contents help options

071:正規表現のメタ文字をエスケープする

re.escape

正規表現のメタ文字を持つかもしれない文字列そのものにマッチさせるため、メタ文字をエスケープするには re.escape 関数を用います

>>> import re
>>> print re.escape(r'*.txt')
\*\.txt
>>> print re.escape(r'what?')
what\?
>>> print re.escape(r'[a-z]')
\[a\-z\]
>>> print re.escape(r'{a,b}')
\{a\,b\}
>>> print re.escape(r'C:\Python25')
C\:\\Python25
>>> re.search(r'*.py', r'C:\Python25\*.py') # * や . が正規表現リテラルのため異常動作する
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python25\Lib\re.py", line 142, in search
    return _compile(pattern, flags).search(string)
  File "C:\Python25\Lib\re.py", line 241, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat
>>> re.search(re.escape(r'*.py'), r'C:\Python25\*.py') # 意図した動作
<_sre.SRE_Match object at 0x00B43C60>