この記事では、Pythonの正規表現で、文字列の行頭
または行末
といった特定の位置にパターンをマッチさせるための特殊文字、キャレット(^)
とドル記号($)
について解説します。これらはアンカー
と呼ばれます。
目次
キャレット^
:文字列の先頭にマッチ
正規表現パターンの先頭にキャレット^
を置くと、そのパターンが文字列の先頭に存在する場合にのみマッチします。
import re
# "INFO:"で始まる文字列にマッチするパターン
log_pattern = re.compile(r'^INFO:')
# マッチする例
match1 = log_pattern.search("INFO: User logged in successfully.")
if match1:
print("マッチ1: 成功")
# マッチしない例 (先頭が"INFO:"ではないため)
match2 = log_pattern.search("WARNING: INFO: User action.")
if match2 is None:
print("マッチ2: 失敗")
実行結果:
マッチ1: 成功
マッチ2: 失敗
ドル記号$
:文字列の末尾にマッチ
パターンの末尾にドル記号$
を置くと、そのパターンが文字列の末尾に存在する場合にのみマッチします。
import re
# ".log"で終わる文字列にマッチするパターン
file_pattern = re.compile(r'\.log$')
# マッチする例
match1 = file_pattern.search("system_event_2025.log")
if match1:
print("マッチ1: 成功")
# マッチしない例 (末尾が".log"ではないため)
match2 = file_pattern.search("error.log.old")
if match2 is None:
print("マッチ2: 失敗")
実行結果:
マッチ1: 成功
マッチ2: 失敗
^
と$
の組み合わせ:文字列全体との完全一致
^
と$
をパターンの両端に使うと、文字列全体がそのパターンに完全に一致することを要求できます。これは、入力値のバリデーション(検証)などで非常に役立ちます。
例えば、文字列が数字のみで構成されているかを確認するパターンは r'^\d+$'
となります。
^
: 文字列の先頭から\d+
: 1桁以上の数字が$
: 文字列の末尾まで続く
import re
# 文字列全体が1桁以上の数字であるかにマッチするパターン
numeric_pattern = re.compile(r'^\d+$')
# マッチする例
match1 = numeric_pattern.search("1234567890")
if match1:
print("マッチ1: 成功")
# マッチしない例 (数字以外の文字が含まれる)
match2 = numeric_pattern.search("123xyz456")
if match2 is None:
print("マッチ2: 失敗")
# マッチしない例 (空白が含まれる)
match3 = numeric_pattern.search("123 456")
if match3 is None:
print("マッチ3: 失敗")
実行結果:
マッチ1: 成功
マッチ2: 失敗
マッチ3: 失敗
まとめ
正規表現のアンカー^
と$
は、文字そのものではなく、文字列内の位置
にマッチします。^
は文字列の先頭、$
は文字列の末尾にパターンを固定(アンカー)する役割を持ちます。両者を組み合わせた^...$
という形式は、文字列全体のフォーマットを厳密に検証する際の基本的なテクニックです。