文字列が電話番号かどうかを確かめる - Python の正規表現
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
^ は文字列のはじまり、$ は終わりを意味します。