正規表現とは?
- 正規表現は、強力で柔軟、かつ効率的なテキスト処理の鍵を握る存在
- 様々な用途に対応できる能力と表現力を持った一般的なパターン言語が発達してきた
上司からの依頼(ユースケース)
「郵便番号を1つの項目で管理しているWebシステム。これを別項目で管理するようになるので移行します!
ただ、現状正しい書式で入っていないものもいくつかあるのでまずはその数を調査してほしい!」
レコードは80万行あります!
依頼まとめ
1,住所項目に正しい郵便番号が設定されていないレコード数を調査
2,80万行のCSVファイルから(カンマで値を区切ったテキストファイル)
考えられる手法
1.CSVならEXCELが得意!Excelやスプレットシートに貼り付けて検索しよう!
→80万行、、やりたくない
2,俺の目に任せろ(目視で件数を数える)
→この根性は別のタイミングで活かしましょう
この要件の法則
正規表現
この文字列で検索してみよう!
\d{3}-\d{4}
ただ、このやり方には問題が、、。
- 1603-8135のような行がヒットする
- そもそも誤った郵便番号が設定されていない行を知りたい
この要件を満たすために以下の正規表現で検索をかけてみる。
(?<=^([^,]*,){3})(?!\d{3}-\d{4}[^\d])
解説
左の部分で先頭から3番目のカンマ区切り位置を表現して、右側で郵便番号の書式が存在しないことを表現している。
まとめ
正規表現を使えばあらゆるパターンで合致できる。
否定的後読み(?<=
)や肯定的先読み(?=
)は初めて知った。