見出し画像

Tableau×落とし穴 ~正規表現~

技術系に詳しくなければそもそも正規表現って何?ですよね、普通(笑)

正規表現とは

ざっくり説明だと、ある「文字列」と「特定の文字列」比較して、含まれていたらあれこれ操作できる機能、です(独断と偏見)。
詳細はWikipediaあたりで確認してください。

Tableau関数

  • REGEXP_REPLACE

  • REGEXP_MATCH

  • REGEXP_EXTRACT

  • REGEXP_EXTRACT_NTH

一番基本となる機能はMATCHでしょうか(引数がシンプル、結果も真偽で分かりやすい)

REGEXP_MATCH(string, pattern)

stringには文字列を指定するだけなので難しくないのですが、patternがやっかいです。初めて見ると暗号にしか見えません。
しかし、慣れてくるとない世界には戻れません(便利すぎます)

patternは単なる文字列

関数や演算子(+など)で色々加工できます。
文字列として扱う場合は、'文字列' のようにシングルクオテーションでくくります。"文字列" のようにダブルクオテーションも可、です。

正規表現でヌマるパターン

  • 正規表現の構文を理解できていない(今回は扱わない)

  • 理解できているけどその文字列に加工できていない

文字列加工(文字列演算)の例

  • "a"+"b"="ab"

  • "(a"+"|"+"b)"="(a|b)"

よくある失敗1

変数が""でくくられて「変数」という文字列になっている

  • "a"+"変数"+"b"="a変数b"

例えば、パラメータで打ち込んだ "ab" を正規表現のpatternとして扱いたい場合に、"a"+"[パラメータ]"+"b"としてしまうとどうなるか。
求める文字列は、"aabb" ですが、ここで出来上がる文字列は、"a[パラメータ]b" です。

対策

pattern部分を計算フィールドで独立させて、どのような文字列になっているか確認する(超重要)

よくある失敗2

いきなり完成形を書こうとする

Excel VBAの質問でも多いのですが、経験が少ない人ほど、いきなり難しいコードを書こうとしています。
上級者ほど、シンプルなコードをまず動かして、正しく動いたら1行付け足して、といった書き方をします(多分。スーパーハカーはいきなり長文の完成されたコードを書けるらしいですが、残念ながら身近なところでお目にかかったことがありません・・・)

対策

求めたい機能をばらして、それぞれの機能が動くことを確認して、その後に機能を組み合わせる。
今回、そもそもこの正規表現のnoteを書くきっかけになったのは、

regex_matchに変数入れて複数条件の前方一致をやる

このQuestionに答えるためです。
使うだろう機能はこの4つ(かな?)。

  • 変数

  • 複数条件  ⇒(a|b) "a"または"b"を含む

  • 前方一致  ⇒ ^a  aで始まる

  • 文字列結合 ⇒ "a"+"b"="ab"

まずは変数で動くかを確認します。
動いたら、2つの変数をつなげてみます。

変数で動いたので複数条件を試します

同じく変数で前方一致

複数条件はできたので、前方一致の複数条件を指定

結果だけならこれでもOK。
だが、しかし!

ユーザーに「|」を入力させることはできないだろうから、関数側で「|」を処理して、パラメータを2つ入力させる。

ラスト! 「^」も関数側で処理

まとめ

正規表現は、とにかく「慣れ」と「根気」だと思います。
あとは検索して解説しているパターンと結果をいろんな種類を実際に見て、真似してみる。

さぁ、皆さんも正規表現の世界へ!

関連リンク

そもそもの始まり

正規表現の仕組み(師匠より)


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