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