ユーザ・インタフェースで難しいのは入力であると言われている。ここでは自由形式で入力した住所録のデータ(氏名・郵便番号・住所・電話番号)から、氏名、郵便番号、住所、電話番号の文字列を取り出すことを考えた。全くの自由であると処理方法が極めて複雑ななるので、ここではこれらの文字列はそれぞれ一行に書かれているとするが、氏名をはじめに書くときもあれば、郵便番号最初に書くばあいもある。問題は行毎に書かれている文字列を判定する作業である。
最も簡単なものは郵便番号行で「〒」(例:〒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
となり、期待した結果がでる。
郵便番号行の検出が最も簡単である。次は電話番号行の検出、住所行の検出、氏名行の検出を考える。氏名行の検出が手掛りがなく最も困難であると思われる。