文字列が電話番号かどうかを確かめる - Python の正規表現
2023.02.18
Python で文字列が電話番号かどうかを確かめるには正規表現パッケージ re
を使います。
import re
pattern = r'\d{3}-\d{4}-\d{4}'
a = '090-1111-2222'
if re.match(pattern, a):
print('パターンにマッチします')
else:
print('パターンにマッチしません')
# パターンにマッチします
パターンにマッチすると match
は Match
オブジェクトを返し、マッチしなかったときは None
を返します。
import re
pattern = r'\d{3}-\d{4}-\d{4}'
a = '090-1111-2222'
b = '03-1234-5678'
m = re.match(pattern, a)
n = re.match(pattern, b)
print(m) # <re.Match object; span=(0, 13), match='090-1111-2222'>
print(n) # None
完全マッチング
import re
pattern = r'\d{3}-\d{4}-\d{4}'
a = '090-1111-2222xxx'
b = 'xxx090-1111-2222'
m = re.match(pattern, a)
n = re.match(pattern, b)
print(m) # <re.Match object; span=(0, 13), match='090-1111-2222'>
print(n) # None
a
は余計な文字列がついているのにマッチしています。Python の match は文字列とパターンをはじめから比較し、マッチするとすみやかに Match を返します。そのため最初からマッチしない b
では None が返っている。文字列がパターンに完全にマッチしているか確かめるときは、パターンに ^
と $
を入れます。
import re
pattern = r'^\d{3}-\d{4}-\d{4}$'
a = '090-1111-2222'
b = '090-1111-2222xxx'
m = re.match(pattern, a)
n = re.match(pattern, b)
print(m) # <re.Match object; span=(0, 13), match='090-1111-2222'>
print(n) # None
^
は文字列のはじまり、$
は終わりを意味します。