home changes contents help options

070:文字列が正規表現として正しいか調べる

正規表現として正しいか調べるには正規表現オブジェクトにコンパイルしてみるのが 最も手軽で早いです。:

   >>> import re
   >>> re.compile('abc')
   <_sre.SRE_Pattern object at 0x00A74C80>
   >>> re.compile('(abc')
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "C:\Python25\Lib\re.py", line 180, in compile
       return _compile(pattern, flags)
     File "C:\Python25\Lib\re.py", line 233, in _compile
       raise error, v # invalid expression
   sre_constants.error: unbalanced parenthesis

正規表現として正しくないときには re.error 例外となります。 チェックのためだけに例外を送出したくない場合は、次のように関数化しておくとよいでしょう。。:

   import re
   def re_check(string):
       try:
           return re.compile(string)
       except re.error:
           pass
       return False

正しいときには正規表現オブジェクト、正しくないときには False が返ります。 正しいときに True を返すようにしてもかまいませんが、正規表現オブジェクトを評価すると真なので このままでも支障ないはずです。:

   >>> re_check("abc")
   <_sre.SRE_Pattern object at 0x00A74C80>
   >>> re_check("(abc")
   False
   >>> if re_check("abc"):
   ...     print "OK"
   ...
   OK
   >>> if re_check("(abc"):
   ...     print "OK"
   ...