
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