Power Queryで正規表現を使用する方法

Power Query

こんにちは!ウメハラ(plumfield56)です。

今回はPower Queryで正規表現を使う方法を紹介します。

Power Queryで正規表現を使う方法に関する記事を探していたら、こちらの記事がヒットしました。

RegEx in Power BI and Power Query in Excel with Java Script – The BIccountant
You can use Java Script within the Web.Page-function to execute RegEx (regular expressions) on your Power BI or Power Query data:

このページに書かれている下記のコードを少し変えて解説していきたいと思います。

let
    fx=(x,y)=>Web.Page(
    "<script>
    var x = "&x&";
    var y = new RegExp('"&y&"','g');
    var b = x.match(y);
    document.write(b);
    </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
    fx("""hello012中国1235""","\\d+")

コードの解説

Web.Page

Web.PageはHTMLを読み取ってアウトプットしてくれる機能をもっています。

Web.Page - PowerQuery M
Learn more about: Web.Page

なのでその機能を使ってJavaScriptで正規表現の処理を行って返すための記載をそれ以降のコードで記載をしています。

“&&”の意味

テキストの中に変数を入れてつなげるために一度ダブルクォーテーション(“)でテキストを閉じてアンド(&)で繋げています。

JavaScriptだとプラス(+)でテキストをつなげますが、Power Queryの場合はアンド(&)で繋げることが可能です。

下記のようにテキストをつなげているために行っているということです。

let
    text = "World"
    output = "Hello " & text & "!"
in
    output //Hello World!

JavaScriptのコード

match関数を使って処理を行っているのは下記の部分になります。

 var x = "&x&";
 var y = new RegExp('"&y&"','g');
 var b = x.match(y);

正規表現で抽出したい変数bを作成したのちに document.write() で返すための処理を行っています。

[Data]{0}[Children]{0}[Children]{1}[Text]{0}

document.write()を使用するとテーブルやリストが作成されます。

Children{1}部分で評価したHTMLのheadではなくてbody部分を取ったりという指定でテキストを取得するために使用しています。

よりよい記載方法

このコード自体いけていないと思ったので、自分で書き直したコードがこちらになります。

let
    replacer = (char, reg) => Web.Page(
        "<script>
            var match = '"&char&"'.match(/"&reg&"/g);
            document.write(match);
        </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

in
    replacer("""hello012中国1235""","\d+")

ちなみに変数を指定する際はconst,letだと動かないのでvarで指定する必要があります。

ということでPower Queryで正規表現を使うためにはWeb.Pageを使ってJavaScriptで処理をする必要があるというお話でした。

次回は列の変更方法から実際に関数を列全体に実行する方法を紹介していきます。

このシリーズの記事

  1. Power Queryで正規表現を使用する方法
  2. Power Queryで正規表現を使ってデータを整える
  3. Power Queryで正規表現を使ってデータを整える②

コメント

タイトルとURLをコピーしました