正規表現検索Tips(REEXEとREEXE2)


正規表現関数

REEXEは文字列を正規表現で検索してマッチした部分を返す関数です。
インデックス番目にマッチした箇所を対象にします。
REEXE(文字列,検索文字列,インデックス)

REEXE2は文字列を正規表現で検索してマッチした部分のサブマッチ部分を返す関数です。
インデックス番目にマッチした箇所のサブマッチ番目のサブマッチが対象になります。
サブマッチとはパターン中の()(パーレン)で囲まれた部分で、後方参照の$nの部分になります。
REEXE2(文字列,検索文字列,サブマッチ,インデックス)

これらの関数は文字列から部分文字列を抽出するのに使用できます。

今回はこれらの関数を使用して、住所から都道府県、市、区を抽出してみます。

REEXE


上のようなデータがあったとします。
B列に住所が入っています。
C列に都道府県を抽出します。
^.+?[都道府県]
この正規表現で都道府県にマッチするので、C列、例えばC2セルに、
=REEXE(B2,"^.+?[都道府県]",1)
と入力します。


REEXE2

次にD列に市、E列に区を抽出します。
D2セルに、
=REEXE2(B4,"^.+?[都道府県](.+?市)",1,1)


E2セルに、
=REEXE2(B2,"^.+?[都道府県](.+?市)?(.+?区)",2,1)
と入力します。


区の場合は2番目の括弧なので、サブマッチに2を指定しています。

不完全な正規表現

実は、この正規表現は完全ではありません。
都道府県、市、区それぞれで、最短一致を使用しているので、
例えば、「広島県廿日市市」の場合は、
市で「廿日市市」と抽出されず、「廿日市」と抽出されてしまいます。
最短一致をやめればこの例の住所リスト(都道府県+市+区まで)ではうまくいきますが、
その先の町名がある場合に、町名に「市」という文字が含まれると、そこまで拾ってしまいます。
例えば「千葉県市川市市川」の場合、市が「市川市市」になってしまいます。
ここでは、この2つの関数の使い方を紹介するのが目的なので、
この正規表現の不完全さには目を瞑ることにします。


正規表現検索に戻ります

トップに戻ります


お探しの情報は見つかりましたか?
まだの方はこちらをどうぞ。
Google

PageTop