还没关注?↑↑↑伸出手指点上方“名片”这里

在数据清洗过程中document.writedocument.write,我们常遇到非结构化文本的挑战:

Power Query虽内置文本函数(如Text.、Text.Split),但面对复杂规则时,正则表达式(Regex)才是真正的“瑞士军刀”。然而,Power Query原生并不直接支持正则表达式——这需要通过巧妙的方法实现。

一个常用的方案是通过自定义函数+Web.Page()来实现,这是目前最灵活的解决方案,利用Web.Page()函数执行正则逻辑。

注意:在Power Query中使用正则表达式,效率比较慢。大数据量建议用其他方法或工具解决(VBA、等)

1.需求

从订单详情情中,提取出订单号,订单号的规则是19位的数字。

2.解决步骤2.1 自定义正则函数

先在PQ中创建一个空白查询,打开高级编辑器,输入以下代码


let

    Source = "",

    fx = (string,pattern)=>

        try

            Web.Page("document.write( '"&string&"'.match(/"&pattern&"/g) )")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

        otherwise null

in

    fx

2.2 调用正则函数

调用前先把数据处理下,把换行符调整为空格,实测有可能会匹配不到(哪怕在多行模式下)。

Table.(源,"#(lf)"," ",.,{"订单详情"})

然后增加1列,直接调用正则函数,正则代码根据需求灵活调整,需要有一点正则的基础。

这里需求是提取19位数字,正则代码为:"d{19}"

Table.(替换的值, "订单号", each reg([订单详情], "d{19}"))

最终代码如下:


let

    reg= (string,pattern)=>

        try

            Web.Page("document.write( '"&string&"'.match(/"&pattern&"/g) )")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

        otherwise null,

     = Excel.CurrentWorkbook(){[Name="表3"]}[Content],

    替换的值 = Table.ReplaceValue(,"#(lf)"," ",Replacer.ReplaceText,{"订单详情"}),

    已调用自定义函数 = Table.AddColumn(替换的值"订单号"eachreg([订单详情], "d{19}"))


in

    已调用自定义函数

往期推荐:

PS:右下角“点赞”+“分享”+“在看”支持下,素质三连,感激不尽!

同时,记得公众号置顶(设为星标),干货资源,一键查找阅读更方便!


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注