Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

正規表現: [^a-z0-9_]の 意味を解説します。「 bool(re.match('[^a-z0-9_]+', '')) でFALSEになる例はありますか?」

f:id:nana_yu:20190411184652p:plain

PyQサポートのkamekoです。今日は、正規表現の文字クラス内で使われる記号 ^ について解説します。

質問

[^a-z0-9_]の意味が良く分かりません。 print(bool(re.match('[^a-z0-9_]+', ''))) でFALSEになる例はありますか

回答

[] の最初の文字が ^ の場合、その後に続く文字以外の文字とマッチするという意味です。 re.match('[^a-z0-9_]+', string) の意味は「stringの先頭から、小文字のアルファベット(a〜z)、数値(0〜9)とアンダースコア( _以外の1文字以上の文字列」があれば、マッチオブジェクトを返すという意味です。大文字のアルファベット、-*などの記号、全角文字などが該当します。

提示されたコードでは、bool() で囲まれているので、マッチオブジェクトが返っていれば True になります。

例.

>>> bool(re.match('[^a-z0-9_]+', "abc"))
False
>>> bool(re.match('[^a-z0-9_]+', "123"))
False
>>> bool(re.match('[^a-z0-9_]+', "_123"))
False
>>> bool(re.match('[^a-z0-9_]+', string))
True
>>> bool(re.match('[^a-z0-9_]+', "AAAbbb"))
True
>>> bool(re.match('[^a-z0-9_]+', "-AAAbbb"))
True
>>> bool(re.match('[^a-z0-9_]+', "*AAAbbb"))
True
>>> bool(re.match('[^a-z0-9_]+', "あ123"))
True

公式ドキュメント:正規表現 HOWTO

docs.python.org

Copyright ©2017- BeProud Inc. All rights reserved.