Power query正则表达式的使用

power query本身不能直接使用正则表达式,我们是通过web类的函数Web.Page()构建借用了js的正则表达式。有关js正则表达式我在这里就不介绍了。入门学习可以去网址:http://www.runoob.com/js/js-regexp.html。今天我们要解决的问题是提取出下表中每个字符串长度刚好为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++)就直接解决了问题。所以建议遍历数组时候多用后面一种循环方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值