Pythonで正規表現:郵便番号

ユーザ・インタフェースで難しいのは入力であると言われている。ここでは自由形式で入力した住所録のデータ(氏名・郵便番号・住所・電話番号)から、氏名、郵便番号、住所、電話番号の文字列を取り出すことを考えた。全くの自由であると処理方法が極めて複雑ななるので、ここではこれらの文字列はそれぞれ一行に書かれているとするが、氏名をはじめに書くときもあれば、郵便番号最初に書くばあいもある。問題は行毎に書かれている文字列を判定する作業である。

最も簡単なものは郵便番号行で「〒」(例:〒888-8888)ではじまる。または行末が「数字3文字-数字4文字」(例:888-8888)、または「数字7文字」(例:8888888)になっているという条件に合う行がそれであるとする。

このような条件に有った文字列を調べるには「正規表現」が便利である。このような正規表現をPythonで書くと以下のようになる:


#coding: utf-8
import re
msgs = ['〒123-4567', '123-4567',  '1234567', '123-45']
for i, msg in enumerate(msgs):
    m1 = re.search(r'^〒', msg)
    m2 = re.search(r'\d{3}\-\d{4}$', msg)
    m3 = re.search(r'\d{7}$', msg)
    if bool(m1) or bool(m2) or bool(m3):
        print(msg, ' OK')
    else:
        print(msg, 'NG')

結果は
〒123-4567 OK
123-4567 OK
1234567 OK
123-45 NG

となり、期待した結果がでる。

郵便番号行の検出が最も簡単である。次は電話番号行の検出、住所行の検出、氏名行の検出を考える。氏名行の検出が手掛りがなく最も困難であると思われる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です