「Tableau」を「T●b●e●u」にも変換できる、REGEXP関数の底力

●これに取り組んだきっかけ

弊社の社内規定上、センシティブな情報を部外に公開するときは
半分程度伏字にしなければならないことがある。

例:Tableau⇒T●b●e●u

例えば「たぶろー」を「Tableau」に置換するなど
特定の文字列の変換はReplace関数で実装可能である。

ところが文字数もどんな値も入るか分からない場合、なかなか難しい。
昔はこれを手作業でやっており、非常に手間であった。

●回答案:REGEXP_REPLALCE関数

先に結論を書くと、これはREGEXP_REPLACEという関数で実現できる。
まずは先に試してみよう。サンプルスーパーストアの「顧客ID」に対して
以下の計算式を当てはめると、奇数番目の文字が伏字になる。

REGEXP_REPLACE([オーダー Id],'([^\s]{1})([^\s]{1})|([^\s]{1})$', '●$2')

画像1

もう少し実用的な例をみてみよう。
顧客名に当てはめると、こうなる。 ​

画像2

上から3番目の阿久津さんや最後の安河内さんが上手くいってない。
原因は全角スペースを無視してカウントしているためなので、
REPLACE関数でスペースを取り除くとうまくいく。

REGEXP_REPLACE(REPLACE([顧客名]," ",""),'([^\s]{1})([^\s]{1})|([^\s]{1})$', '●$2')

画像3


●REGEXP_REPLALCE関数の解説

なんとなく雰囲気が分かったところで、この関数の中身を解説する。
まずは公式のヘルプ(右側に出てくる奴)を引用する。

REGEXP_REPLACE(文字列、パターン、置換文字列)
一致パターンを置換文字列に置き換えた指定された文字列のコピーを返します。
例:REGEXP_REPLACE(’abc  123’,'\s','-') = 'abc--123'

式中の「パターン」とは、正規表現(Regular Expression)を指す。
正規表現とはプログラマが文字列処理をする際に用いる魔法の呪文である。
あえて解説をするとこんな感じであるが、読み飛ばしてもいい。

([^\s]{1})([^\s]{1}) | ([^\s]{1})$
^\s ⇒「\s」が空白文字を意味する。^はその否定なので、空白でない文字
[^\s]{1} ⇒ []は括り、{1}は1文字を意味し、結果、空白ではない1文字。
| ⇒OR条件。要するに空白ではない2文字or空白ではない1文字

●こんな複雑な数式使えないよ!というあなたへ

私自身、正直にいうと正規表現は使えない。
この呪文も近くにいたエンジニアの方に頼んで書いてもらったものである。
なので、複雑な文字加工で悩んだ時には
適切な正規表現をググるなり良さげな方に頼むといいと思う。

なおさっきの解説はここを見ながら書いたものである。
間違ってたらごめんなさい。
https://murashun.jp/article/programming/regular-expression.html

●他のREGEXPシリーズについて

この正規表現シリーズの関数にはTableauにはほかにも3つある。
・REGEXP_MATCH(文字列の判定)
・REGEXP_EXTRACT(文字列抽出)
・REGEXP_EXTRACT_NTH(N番目の文字列抽出)

頭の片隅にこれらの関数を置いておいて、
困ったときには正規表現の力を借りるとよいと思う。
なかなかこの機能を他の文字列関数では代替できない。
REGEXP~関数はいつかあなたの助けになる・・かもしれない。

この記事が気に入ったらサポートをしてみませんか?