環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

文字列が電話番号かどうかを確かめる - 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('パターンにマッチしません')

# パターンにマッチします

パターンにマッチすると matchMatch オブジェクトを返し、マッチしなかったときは 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

^ は文字列のはじまり、$ は終わりを意味します。

Python 正規表現