キャレット記号^ とドル記号 $ を使うと、検索対象の文字列の先頭と末尾にマッチすることを指定することができます。
同時に使うと文字列全体が正規表現とマッチすることを表し、文字列の一部がマッチすだけでは不十分になります。
目次
検索対象を先頭と末尾に指定(^と$)
文字列の先頭とマッチ(キャレット記号^)
r'^Hello'という正規表現は「Hello」から始まる文字列にマッチします。
import re
a=re.compile(r'^Hello') #文字列の先頭に^
b=a.search('Hello.World')
print(b)
#出力結果は
<re.Match object; span=(0, 5), match='Hello'> #'Helloとマッチしています
c=a.search('Hayato said "Hello"')
print(c)
#出力結果は
None #先頭が'Hello'ではないのでマッチしませんでした
このようにキャレット記号^を使うことで、文字列の先頭とマッチするよう指定することができます。
文字列の末尾とマッチ
r'\d$'という正規表現は0~9の数字で終わる文字列にマッチします。
a=re.compile(r'\d$')#$について
b=a.search('Your number is 50')
print(b)
#出力結果は
<re.Match object; span=(16, 17), match='0'> #0だけにマッチしています
c=a.search('Your number is fifty')
print(c)
#出力結果は
None #数字ではないのでマッチしていません
これだと最後の0にしかマッチしていません。r'\d+$' +を付けると文字列の末尾にある1文字以上の数字である文字列とマッチします。
a=re.compile(r'\d+$') #+$で1文字以上の数字である文字列を指定
b=a.search('Your number is 50')
print(b)
#出力結果は
<re.Match object; span=(15, 17), match='50'> #50とマッチしていますね
^ と $ を同時に使う
r'^\d+$'
は、「文字列全体が1文字以上の数字のみで構成されている」ことを表します。
例:
'12345' # マッチ
'123abc' # マッチしない
'abc123' # マッチしない
まとめ
| 記号 | 意味 |
|---|---|
^ | 文字列の先頭 |
$ | 文字列の末尾 |
^パターン$ | 文字列全体がパターンと一致 |
\d+$ | 末尾の数字列 |
^\d+$ | 数字だけの文字列 |
入力値のチェック(電話番号・郵便番号・メールアドレスなど)では、^ と $ をセットで使うことが非常によくあります。例えば、
r'^\d{3}-\d{4}-\d{4}$'
と書けば、
090-1234-5678
のような電話番号形式かどうかを正確に判定できるみたいです。

コメント