コミュニティ
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

ナレッジベース - 日本語

エキスパートから学ぶ。

ツールマスタリー | 正規表現

アステロイド
Created on

この記事はツールマスタリーシリーズの一部です。Designerツールのさまざまな活用例の紹介に役立つナレッジベースを編纂したものです。ここでは、Alteryx Designerをマスターする道のりの一部として、正規表現ツールの使用について掘り下げていきます。

 RegEx.png

正規表現 ツールは、Alteryxの構造解析に関してスイスアーミーナイフのように便利なものです。これを使うことで作業をより速くあるいはより効率よくする方法はたくさんありますが、ブレードを使うだけでも非常に役に立ちます。時には必要なのはそれだけかもしれませんが、正規表現のその他のツールの使い方も学ぶと、できないことはあまりないと気づきます

 

mr bean.pngmacgyver.jpg

正規表現ツールの使用前と使用後

 

正規表現は何に役立てられるでしょうか?

 

Regular Expression(正規表現)は略語でRegExとも書きますが、基本的に別のひとつの言語と考えることもできます。他の言語のように記号も使いますが、正規表現では、これらの記号は、テキスト内の文字、数字、その他のタイプの文字のシーケンスに一致するように使われます。これはパターンを認識する言語です。

 

人間はこの種の作業に優れています。例えば、私があなたに以下のようなテキストを渡したとしましょう。

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612

12303 Airport Way, Suite 250, Broomfield, CO 80021

Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

これらが住所であり、どれが番地でどれが市町村の名前か、あなたは問題無く見分けることができるでしょう。でもコンピューターにとってはただのテキストブロックであり、それが住所であるかどうかは気にしません。正規表現は、テキストの中にある役に立つデータを「認識」できる一つの方法です。これを正規表現バージョンに置き換えて考えてみましょう。

 

3345 ^/d+   正規表現で、^ はラインの始まりを意味するので、それをあなたの最初のパターンに含めるとよいでしょう。ここでの私たちのパターンは/dで、「いずれかの数字」(0-9)を意味します。+ は、以前の式と1回以上一致させることを意味します。住所の最初の部分は番地なので、どんな長さの数字でも入れることができます。
Michelson Drive [^/d]+ ストリートに一致させるには、ストリート名はたいてい1語以上なので、スペースも含めて複数の言葉や文字を拾える表現にします。それを一致させる一つの方法として、[^...]を使わないことです。グループ化の表記法は、「ここに挙げられていない文字」に一致します。結果として、数字ではない他の文字と1回かそれ以上一致します。
Suite 400 .* 住所の次の部分はスイート番号です。それはある場合とない場合がありますが、さまざまな名前が使われる可能性があります。ここで見られるものと一致させる柔軟な表現を定義するために、. を使って 「いずれかの文字」と一致させることができます。* は、他の文字とゼロ回かそれ以上一致させることを意味します。
Irvine [^/d]+ 以前のように、これは「数字ではない文字」を意味します。 
CA /u{2} 州に一致させるため、「いずれかの大文字」を意味するのに /uを使うことができます。これは常に連続した2文字であることが求められているので、式の後に{...}または「いずれかの2つの大文字」を使用して、一致する長さを指定することもできます。
92612 /d{5}$ ZIPコードは5桁の数字であることが多いので、「5文字の数字に一致する」のように言うことができます。次に、$ を入れて、これで現在の行が終わりであることを示すことができます。 

 

cheat.png

業界のツール

 

正規表現の表現を構成するのに多くの記号が使われていますが、Alteryxはツールの中で「早見表」を提供しています。

 

正規表現の使用を開始するのにこれ以上のものはあまり必要ありません。そしてAlteryxのように、パターンに一致させるための表現を作成するにはかなり多くの異なる方法があります。 ですからあまり細かいことを心配しすぎないで、伝統的な「推測して試してみる」学習方法に時間を使ってみてください。

 

trial and error.jpg

心配しないで。伝統的な方法で訓練されたのですから。

 

正規表現の完全ガイドは、Boost-Extendedフォーマットストリングシンタックスガイドや、RegEx Perlシンタックスガイドをご覧ください。

 

Alteryxは4つの方法で正規表現機能を構築しました: 一致解析置き換えそしてトークン化です。これらの方法のヘルプ文書もとても有用です。

 

一致

 

一致 方法とは、既定の表現で文字列が記述されているかを確認するもので、正しい 間違い かを教えてくれます。上のテーブルにある表現要素を使って、住所と一致させましょう。スペース /s とカンマ , があるところにはそれを入れて、ただ並べることで長い表現を作成することができます。

 

regex1.JPG

 

最初の2つの住所はこの表現を使って問題なく一致しましたが、3つ目の住所は私たちが求めていたようにはならず失敗しました。住所の一部がビル名になっている場合についての 曖昧なルールが原因で、番地がスペルでつづられ、既定の表現では一致させることができません。

 

正規表現を上手に書くコツは、あなたのデータにこのような例外があることを予想して、表現の中に含めることです。この住所の中にある「Two」に一致させるため、別の表現を入れて、その場合に限り 一致に失敗するかどうか確認しましょう。ほとんどの住所は、数字で始まります。でもそうでない場合、以下の表現は数字の代わりに単語を確認 します。このようになります:

 

(?:^/d+)|(?:^/w+)

 

見た目よりもずっと簡単で、追加で正規表現の記号を2つ使うだけです。パイプ記号I は「あるいは」を意味します。例えば、a|ba が一致するかどうかを確認し、もし一致しなければ、b が一致するかを確認します。2つ目の記号は (?:...)で、これはマークされていないグループということです。これは操作のためにグループにまとめる方法です。

 

 

regex2.JPG

 

つまり、最初のグループ(?:^/d+)は以前と同じことをしているだけですが、これがうまくいかない場合、この表現では2つ目のグループの (?:^/w+)で一致を試みます。このグループは単語の文字であるアルファベットを探しており、スペースや数字は一致しません。従って、上の住所を文字でつづったものに、問題なく一致します。

 

一致についてもっと見る:

特別課題:正規表現を組み立てる方法はたくさんあります。(?:^/d+)|(?:^/w+)のさらによい代替案があれば下にコメントを記入してください。その方がよい理由は?

 

パース

 

マッチング機能は検証に使えるという点で素晴らしいことです。でもパース方法ではまさに正規表現の真価が発揮され、テキストブロックから役に立つ情報を抽出できるようになります。正規表現ツールはそれを簡単にします。必要なのは、取り出したいものを括弧 (...)でくくるだけです。これらはマークされたグループと呼ばれ、(?:...)の上にあるマークされていないグループに対するものです。

 

regex3.JPG

 

括弧をタイプすると、「ツールスタイル・出力フィールドを選択する」というウィンドウが出てきて、フィールド名やデータタイプを変えることができます。

 

パースについてもっと見る:

 

置換

 

ご覧のように、パース方法は実際には一致の拡張機能であり、テキストからものを取り出して新しい列にきれいに並べることができます。この概念を膨らまして「どうやって戻せばよいか?」と疑問に思うとき、置換方法が登場します。

 

置換を使うと、文字列の要素を解析、交換、また並べ替えもできます。これをするには、マークされたグループを特定することで、正規表現ツールに何をどこで置換するかを指示します。しかも誰でも理解できる言語で...

 

ドル札

 

dapper slothはもちろん正しく、ドルサイン $ と数字を使い、マークされたグループをそれぞれ特定することができます。例えば、$1、$2、$3は、1つ目、2つ目、3つ目のマークされたグループをそれぞれ参照しています。従って私たちの住所のリストで、市と州のリストを解析したかったら、$4、$5という表現をタイプするだけです。

 

regex4.JPG

 

コンマ、そしてスペースをそのテキストボックスにタイプして組み込むことができます。交換方法はとても柔軟で、Regex_Replace関数でフォーミュラツールからも使うことができます。

 

交換についてもっと見る:

 

トークン化

 

きちんと整頓されたリストとして提供されたとき、正規表現は使いやすくなります。でもこれらの住所がAPI呼び出しやデータベースから一つのブロックのテキストとして出されたらどうなるでしょうか?

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612,12303 Airport Way, Suite 250, Broomfield, CO 80021,Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

すべてがコンマで区切られており、あまり使いやすいものではありません。どこで一つの住所が終わってどこから次のが始まるか、分かりにくくなっています。ここで必要なのはトークン化の方法で、列分割ツールのように、これらのテキストを取り出して、列や行に分けます。正規表現 トークン化が他とは違う重要な点が2つあります:

  1. あなたが希望しないもの(コンマなど)と一致させる代わりに、(その他の)希望するものと一致させます。
  2. マークされたグループを使って、何が分割されて何が無視されたかを選択するオプションがあります。 

わかりにくく聞こえるかもしれませんが、実際このオプションによって、何のデータをどのように分割するかについてずっと柔軟性が出てきます。これをお見せするために、コンマを区切り文字として使い、住所を複数の行に分割してみましょう。

 

regex5.JPG

 

すべてを一致させたいので、次の表現を使う必要があります。(.+?)(?:,|$). これを細かく分けてみましょう:

  • .+ いずれかの一文字という意味です  一回以上 +一致した
  • ? は、この一致がgreedyではなくlazyになるようにするということです。これは とても便利な分類法で最初は理解するのが多少難しいでしょうが、このコースの目的として?の意味にフォーカスしましょう: 0回以下の一致 (まったくない) か一回だけを示します。
  • このプラスサイン+ は実際逆を指します: これは greedy の記号なので、その前の一文字.は   一回以上 一致するかどうか試します。何かがgreedyかlazyというとき、それはどういう意味なのでしょう? 次の一致 を見ることが強制されるので、greedyと言います。.+? の本当の意味:
    次に来るものに一致するまで、一文字を一回以上一致させる #39;.
  • 次に来るのは マークされていないグループ(?:,|$)で、これは 停止 サインとして機能し、その前の (.+?)に対応するものです。これはマークされたグループの中にはないので、結果の中には現れません。マークされていないグループの中にあるので、 コンマ , か、テキストのかたまりの最後にある end-of-line $ を探します。

難しいですね。ちょっと休憩して、ストレッチ、散歩、あるいは瞑想などを行ってください。

 

line noise.gif

 

もちろん、列分割 ツールは、上の例よりもコンマでずっと容易に分割することができます。しかしもう少し使いやすい方法をためすことによって、トークン化の柔軟性がクローズアップされます。 例えば、住所の情報ブロックを分割して、元々あった3つの住所にすることができます。

 

regex6.JPG

 

この場合、ZIPコードの最後の一致表現である /d{5} を使い、一致したものがどこで終わっているかをマークします。上記のように、各行はコンマかend of lineで終わるので、(?:,|$) をここで使い、きちんと分割することができます。上の例では、これを置換するために、? で0か1回一致させることができることをお見せました。よって、マークされたグループの一致の後「オプションのコンマ」で分割することができます。

 

トークン化 についてもっと見る:

特別課題: 以前のケースでの ,? 、コンマを分割するだけでうまくいきませんでした。つまり(.+?),? (.+?)(?:,|$)の代わりに使ったわけです。なぜですか?

外部に誇れて自慢できるように、説明入りのコメントを下に書きます。

 

regex.png

 

ここまでくれば、あなたの正規表現ツールの使用スキルは専門家のレベルまで達したことでしょう!私たちがここで提供していない使用方法があれば、下のコメント欄にぜひ書き込んでください!もうツールマスターを自負していますか?こちら community@alteryx.com までご連絡くだされば、ツールマスタリーシリーズに、あなたのクリエイティブなツール使用法を掲載いたします。

 

TwitterでAlteryxをフォローして、毎週火曜日のツール・チューズデーには、最新の投稿をご確認ください!Designerツールのすべてをマスターしたい方は、メールでのお知らせに登録されることをお薦めします。

添付