还没关注?↑↑↑伸出手指点上方“名片”这里
在数据清洗过程中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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。