02-14-2019 09:20 AM - 最終編集日: 06-01-2020 01:14 PM 、編集者: SaoriG
この記事はツールマスタリーシリーズの一部です。Designer ツールのさまざまな活用例の紹介に役立つナレッジベースを編纂したものです。ここでは、Alteryx Designer をマスターする道のりの一部として、正規表現ツールの使用について掘り下げていきます。
正規表現 ツールは、Alteryx の構造解析に関してスイスアーミーナイフのように便利なものです。これを使うことで作業をより速くあるいはより効率よくする方法はたくさんありますが、ブレードを使うだけでも非常に役に立ちます。時には必要なのはそれだけかもしれませんが、正規表現のその他のツールの使い方も学ぶと、できないことはあまりないと気づきます。
正規表現ツールの使用前と使用後
正規表現(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文字の数字に一致する」のように言うことができます。次に、$ を入れて、これで現在の行が終わりであることを示すことができます。 |
正規表現の表現を構成するのに多くの記号が使われていますが、Alteryx はツールの中で「早見表」を提供しています。
正規表現の使用を開始するのにこれ以上のものはあまり必要ありません。そしてAlteryx のように、パターンに一致させるための表現を作成するにはかなり多くの異なる方法があります。 ですからあまり細かいことを心配しすぎないで、伝統的な「推測して試してみる」学習方法に時間を使ってみてください。
心配しないで。伝統的な方法で訓練されたのですから。
正規表現の完全ガイドは、Boost-Extendedフォーマットストリングシンタックスガイドや、RegEx Perlシンタックスガイドをご覧ください。
Alteryxは4つの方法で正規表現機能を構築しました: 一致、解析、置き換えそしてトークン化です。これらの方法のヘルプ文書もとても有用です。
一致 方法とは、既定の表現で文字列が記述されているかを確認するもので、正しい か 間違い かを教えてくれます。上のテーブルにある表現要素を使って、住所と一致させましょう。スペース /s とカンマ , があるところにはそれを入れて、ただ並べることで長い表現を作成することができます。
最初の2つの住所はこの表現を使って問題なく一致しましたが、3つ目の住所は私たちが求めていたようにはならず失敗しました。住所の一部がビル名になっている場合についての 曖昧なルールが原因で、番地がスペルでつづられ、既定の表現では一致させることができません。
正規表現を上手に書くコツは、あなたのデータにこのような例外があることを予想して、表現の中に含めることです。この住所の中にある「Two」に一致させるため、別の表現を入れて、その場合に限り 一致に失敗するかどうか確認しましょう。ほとんどの住所は、数字で始まります。でもそうでない場合、以下の表現は数字の代わりに単語を確認 します。このようになります:
見た目よりもずっと簡単で、追加で正規表現の記号を2つ使うだけです。パイプ記号I は「あるいは」を意味します。例えば、a|b は a が一致するかどうかを確認し、もし一致しなければ、b が一致するかを確認します。2つ目の記号は (?:...)で、これはマークされていないグループということです。これは操作のためにグループにまとめる方法です。
つまり、最初のグループ(?:^/d+)は以前と同じことをしているだけですが、これがうまくいかない場合、この表現では2つ目のグループの (?:^/w+)で一致を試みます。このグループは単語の文字であるアルファベットを探しており、スペースや数字は一致しません。従って、上の住所を文字でつづったものに、問題なく一致します。
一致についてもっと見る:
特別課題:正規表現を組み立てる方法はたくさんあります。(?:^/d+)|(?:^/w+)のさらによい代替案があれば下にコメントを記入してください。その方がよい理由は?
マッチング機能は検証に使えるという点で素晴らしいことです。でもパース方法ではまさに正規表現の真価が発揮され、テキストブロックから役に立つ情報を抽出できるようになります。正規表現ツールはそれを簡単にします。必要なのは、取り出したいものを括弧 (...)でくくるだけです。これらはマークされたグループと呼ばれ、(?:...)の上にあるマークされていないグループに対するものです。
括弧をタイプすると、「ツールスタイル・出力フィールドを選択する」というウィンドウが出てきて、フィールド名やデータタイプを変えることができます。
パースについてもっと見る:
ご覧のように、パース方法は実際には一致の拡張機能であり、テキストからものを取り出して新しい列にきれいに並べることができます。この概念を膨らまして「どうやって戻せばよいか?」と疑問に思うとき、置換方法が登場します。
置換を使うと、文字列の要素を解析、交換、また並べ替えもできます。これをするには、マークされたグループを特定することで、正規表現ツールに何をどこで置換するかを指示します。しかも誰でも理解できる言語で...
dapper slothはもちろん正しく、ドルサイン $ と数字を使い、マークされたグループをそれぞれ特定することができます。例えば、$1、$2、$3は、1つ目、2つ目、3つ目のマークされたグループをそれぞれ参照しています。従って私たちの住所のリストで、市と州のリストを解析したかったら、$4、$5という表現をタイプするだけです。
コンマ、そしてスペースをそのテキストボックスにタイプして組み込むことができます。交換方法はとても柔軟で、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つあります:
わかりにくく聞こえるかもしれませんが、実際このオプションによって、何のデータをどのように分割するかについてずっと柔軟性が出てきます。これをお見せするために、コンマを区切り文字として使い、住所を複数の行に分割してみましょう。
すべてを一致させたいので、次の表現を使う必要があります。(.+?)(?:,|$). これを細かく分けてみましょう:
難しいですね。ちょっと休憩して、ストレッチ、散歩、あるいは瞑想などを行ってください。
もちろん、列分割 ツールは、上の例よりもコンマでずっと容易に分割することができます。しかしもう少し使いやすい方法をためすことによって、トークン化の柔軟性がクローズアップされます。 例えば、住所の情報ブロックを分割して、元々あった3つの住所にすることができます。
この場合、ZIPコードの最後の一致表現である /d{5} を使い、一致したものがどこで終わっているかをマークします。上記のように、各行はコンマかend of lineで終わるので、(?:,|$) をここで使い、きちんと分割することができます。上の例では、これを置換するために、? で0か1回一致させることができることをお見せました。よって、マークされたグループの一致の後「オプションのコンマ」で分割することができます。
トークン化 についてもっと見る:
特別課題: 以前のケースでの ,? は、コンマを分割するだけでうまくいきませんでした。つまり(.+?),? を (.+?)(?:,|$)の代わりに使ったわけです。なぜですか?
外部に誇れて自慢できるように、説明入りのコメントを下に書きます。
ここまでくれば、あなたの正規表現ツールの使用スキルは専門家のレベルまで達したことでしょう!私たちがここで提供していない使用方法があれば、下のコメント欄にぜひ書き込んでください!もうツールマスターを自負していますか?こちら community@alteryx.com までご連絡くだされば、ツールマスタリーシリーズに、あなたのクリエイティブなツール使用法を掲載いたします。
TwitterでAlteryxをフォローして、毎週火曜日のツール・チューズデーには、最新の投稿をご確認ください!Designerツールのすべてをマスターしたい方は、メールでのお知らせに登録されることをお薦めします。