はじめに
Alteryxの正規表現がなかなか使いこなせないので備忘も込めてご紹介します。
正規表現とは
内容が異なる文字列を1つの形式で表現する表現方法です。
「ある文字列の中にある5桁の数字」や「アルファベットとスペースが含まれる文字列」等、
一定の規則を持った複数の文字列パターンを、1つの文字列で表現できます。
基本的な正規表現の一覧
Alteryxで意図通り動いたもののみ、下記サイトを参考に記載しています。
https://www-creators.com/tool/regex-checker
上記URLでは、
正規表現で表したい文字列を、作成した正規表現で表現できているかのチェックができるので
うまく正規表現に置き換えられないときにおすすめです。
正規表現 | 正規表現が指す文字列の内容 | 正規表現 | 正規表現が指す文字列の内容 |
---|---|---|---|
. | 改行を除くすべての文字 | - | - |
* | 直前で指定した正規表現の0回以上連続 | + | 直前で指定した正規表現の1回以上連続 |
(R) | 正規表現のグルーピング | [abc] | カッコ内文字のうちいずれかの1文字 |
[a-c] | カッコ内文字のいずれか | [^abc] | カッコ内文字以外の1文字 |
{N} | 直前の正規表現パターンのN回の連続 | {N,} | 直前の正規表現パターンのN回以上の連続 |
{,M} | 直前の正規表現パターンのM回以下の連続 | {N,M} | 直前の正規表現パターンのN回以上M回未満の連続 |
^ | テキストの開始位置 | $ | テキストの終了位置 |
\t | タブ | \0 | Null文字 |
\s | 空白文字すべての文字 (\t, \n, \r, \fと同義) | \S | 空白文字以外のすべての文字 |
\d | 任意の数字1文字 | \D | 数字以外の任意の1文字 |
\w | アルファベット, "_"のうち任意の1文字 | \W | アルファベット, "_"以外の任意の1文字 |
\l | 半角英小文字のうち任意の1文字 | \L | 半角英小文字以外の任意の1文字 |
\u | 半角英大文字のうち任意の1文字 | \U | 半角英大文字以外の任意の1文字 |
Alteryxでの正規表現の使い方
Alteryxで正規表現が使用できるノードは正規表現・フィルタ・フォーミュラ系・動的リネーム等です。
※リンク先は公式
正規表現自体はどのノードでも同じものを使用できますが、
正規表現ツールは正規表現を直接入力、
フィルタ・フォーミュラ・動的リネームについては正規表現用の関数を使用する違いがあります。
今回は、下記データを使用した正規表現ノードでの処理をご紹介します。
3行目・5行目の数値に対して正規表現でいろいろな処理を行ってみるとします。
正規表現で指定したいものは数値なので数値を表す \d
と、
桁数が異なる値に両方対応させたいので、1回以上繰り返す表現の+
を使用します。
組み合わせて、「98」「7」両方に対応する正規表現は\d+
となります。
正規表現ノードでの処理
正規表現ノードでは ①置換②トークン化③解析④一致 の4つの処理を行えます。
①置換
正規表現に該当する文字列を指定文字列に置換します。
今回は数値を空白へ置換しています。
正規表現はグループ化でき、グループ化した正規表現は前から連番が振られます。
$番号
で指定することが可能で、
「一致する正規表現の1つ目の文字列の前に0を追加する」のような処理も可能です。
②トークン化
正規表現に一致する文字列を列もしくは行へ分割します。
今回は数値部分を列へ分割しています。
③解析
正規表現に一致する文字列で新しい列を作成します。新しい列のデータ型は指定できます。
今回は数値部分をstring型で作成しています。
④一致
正規表現に一致した文字列かどうかをBoolean型で判定します。
今回は数値が含まれる文字列 (.*(\d+)
) か否かを判定しています。
おわりに
正規表現ノード以外での書き方はまたまとめます。