快捷搜索: 王者荣耀 脱发

Power query正则表达式的使用

power query本身不能直接使用正则表达式,我们是通过web类的函数Web.Page()构建借用了js的正则表达式。有关js正则表达式我在这里就不介绍了。入门学习可以去网址:。今天我们要解决的问题是提取出下表中每个字符串长度刚好为3的数值,返回所有的结果(见结果列)。

今天我们就领略一下power query的魅力吧。首先简单介绍一下Web.Page()函数语法:Web.Page(html as text) as table。

这个函数只有一个参数,就是网页字符串。然后其返回值为table,就是一个表格。我自己的实现代码如下:

let
    源 = Excel.CurrentWorkbook(){[Name="表3"]}[Content],
    fx=(x)=>try Web.Page("<script>var stext=" &Text.From(x) & ";var pat=/d+/g;var res=stext.match(pat);a=[];for(var i=0;i<res.length;i++){if (res[i].length==3){a.push(res[i]);};};document.write(a);</script>")
    {0}[Data]{0}[Children]{1}[Children][Text]{0} otherwise null,
    res=Table.AddColumn(源,"结果",each fx([data]))
in
    res

我的思路比较暴力,就是匹配出一个字符串中的所有数值,然后找出其中长度为3的字符串。最后power query中返回的结果如下图:

跟篮球哥学习了一下思路,更简单。就是利用两次正则匹配..第一次替换掉长度大于等于4的数值字符串。剩下的那就只有<=3的长度字的数值符串了。这时候只需要匹配长度为3的数值了,就行了。Web.Page()部分代码如下:

Web.Page("<script>
                                              document.write("&[文本]&".replace(/D+|d{4,}/g, ).match(/d{3}/g))
                                      </script>")
                         [Data]{0}[Children]{0}[Children]{1}[Text]{0}

后记:

我今天在用js的 for in 遍历数组时候发现有bug。验证索引的时候会产生一个input值。我也不知道为什么。然后用 for(var i=0;i<arr.length,i++)就直接解决了问题。所以建议遍历数组时候多用后面一种循环方式。

经验分享 程序员 微信小程序 职场和发展