正規表現
データの加工で欠かせない正規表現についてまとめます。
正規表現とは、色んなパターンの文字列を一つの形式で表すための表現方法です。
こんな時もあったり、なかったり、、等を一つの文字列のパターンで表現します。
特殊文字
特殊文字を組み合わせて抽出した文字列のパターンをつくっていきます。
^ . [ ] * + ? | ( ) $
^ → 行の先頭
. → 一文字
[] → 括弧の中に指定した文字のどれか※特殊文字も通常の文字列として扱われる
* → 直前の文字の0回以上の繰り返し
+ → 直前の文字の1回以上の繰り返し
? → 直前の文字の0回、1階の繰り返し(最短マッチ)
| → いずれかの文字列
() → グループ化する
$ → 行の最後
エスケープ
特殊文字を通常の文字列として扱いたい時にバックスラッシュ(\)を特殊文字の前につけることで通常の文字列として扱うことが出来ます。
文字の範囲を指定
[0-9] → 数字
[A-Z] → アルファベット大文字
[a-z] → アルファベット小文字
[あ-ん] → ひらがな
{n} → 桁数の指定
例えば数字何桁というパターンは下記のように書きます。
[0-9]{n} → 数字n桁
[0-9]{n,m} → 数字n~m桁
具体的な事例
やったことがあるものを具体的に見ていきます。
平米数
小さいほうの平米数(数値)だけにしたいとします。
150.00㎡~200.00㎡
150.00㎡・200.00㎡
150.00㎡(1区画)~200.00㎡(3区画)
150.00㎡(1区画)・200.00㎡(1区画)
幅の持たせ方が~だったり、二つなら・だったり、区画数が括弧書きされていたりします。
^(.*)㎡(\(.*\)|)(~|・).*
もう少し細かく書くとしたら下記のようにも書けます。
^([0-9]{1,5}\.[0-9]{2})㎡(\(.*\)|)(~|・).*
※5桁に絞ったので100000㎡以上の土地はないと仮定しています。
マンションの専有面積
発生し得るデータパターンは3つです。
平米数を数字だけにしたいとします。
壁芯69.22㎡(約20.93坪)
内法50.43㎡(約15.25坪)
77.58㎡(約23.46坪)
最初が壁芯か内法か何もないかでほしい数字があって、その後ろに㎡があってカッコの中に約何坪か書いてある~ってところです。
^(壁芯|内法|)(.*)㎡\(約.*坪\)$
この表現にマッチしていたら二番目のグループを抜き出せばほしい平米数だけ取得することができます。
築年月
パターンは一つだけで、YYYY年MM月という形式にしたいとします。
2008[H20]年02月
西暦と文字列の年の間に[和暦]があって、HだったりSだったりRだったりします。
括弧と和暦が不要なので消したいです。
この時の考え方はYYYYと年MM月を抜き出すか、[和暦]を消すかですが、後者の方が楽なので個人的に好きです。
\[.*\]
このパターンに当てはまる文字列を消せば良いです。
前者のパターンで書くとしたら下記のようにしたらよいと思います。
^(.*)\[.*\](.*)$
一つ目のグループと二つ目のグループを連結させれば良いです。
上記でいいと思いますが、数字の桁数が決まっているのでもう少し具体的に書くことも出来ます。
^([0-9]{4})\[(T|S|H|R)[0-9]{2}\](年[0-9]{2}月)$
この場合は1番目と3番目のグループを連結させたら欲しい形式に出来ます。
(もっと簡単に書けるのでわざわざここまで書かないですが・・)
所感
正規表現はUipathに触れるまで知らなかったですが、スプレッドシートなら関数もありますしデータの加工には欠かせない概念だと思います。
取得したデータから欲しいデータだけを抜き出す方法は正規表現以外にも方法はあるのかもしれませんが、回りくどいことをしなくても正規表現なら一発でできることがほとんどなので使いこなしたいです。
Discussion