按分隔符拆分,这个⽅法真的太爽了!
Excel的核⼼是数据处理,更多倾向数值⽅⾯的处理,相对于⽂本的处理和清洗⽐较吃⼒,但是PQ的定位则是全⾯的数据清洗,专门有⽂本处理类函数,可以说在Excel中的各种⽂本难题,在PQ中都可以⾮常轻松来处理!
今天要聊的主题是:提取指定分隔符之间的字符串!
PQ中⽂本函数⽬前已经有40+,今天我们会涉及到的函数如下:
前三个名称中就是Delimiter,指定分隔符,后两个则是直接给定分割符号来切割,略有不同,都可以实现效果!
具体我们通过案例来说明!
▲数据源
<⾦橘-9.9>/<;莱姆-18.9>/<;蜜柑-6.7>/<;蜜橘-9.9>/<;柠檬-16.4>/<;葡萄柚-9.8>/<;脐橙-
19.9>/<;砂糖橘-14.6>/<;甜橙-9.9>/<⽂旦-8.1>
案例学习
案例1 | 按“/”拆分字符串
= Text.Split(str,"/")
真的是不能再简单了!
Text.Split函数⽐较简单,第⼀参数是需要处理的字符串,第⼆参数是分隔符符!
当然除了上⾯的⽅⾯,我们还有Delimiter相关的函数也可以实现!
= List.Transform({0..9},each Text.BetweenDelimiters("/"& str,"/","/",_))
主要看⼀下Text.BetweenDelimiters函数!以下我们先简单看⼀下简化语法
简化语法:Text.BetweenDelimiters(字符串,开始分隔符,结束分隔符,第⼏段)
第⼏段从0开始!
那么以上公式的意思,就是提取“/”之间1-10端的内容,其实和Split结果是⼀样的!看上去好像⽐Split⿇烦,但是他的核⼼是起⽌分隔符!
下⾯我们进⼀步提取名称和单价,来进⼀步学习:
案例2 | 提取名称和单价
⾸先,我们还是来看⼀下开始和结束分隔符,如何使⽤!
以下公式就是提取“<>”之间的全部内容!
字符串函数库下载= List.Transform({0..9},each Text.BetweenDelimiters(str,"<",">",_))
如果我们还要进⼀步处理,就可以对拆分出来的内容,这个再按“-”拆分!
把上⼀步的结果存储在s中,对s遍历处理即可!
List.Transform(s,each Text.Split(_,"-"))
如果你想转成表格看的更直观,可以简单操作如下:
#table关键字来构建,当然也可以使⽤其他table类函数来处理!
下⾯我们简单的看⼀下SplitAny,看名字⼤概能猜测,Any应该⽀持多字符串
拆分!
= Text.SplitAny(str,"<>/-")
按第⼆参数指定的全部字符串来拆分!
以上的结果,如果数据源对应的分隔符连续就会拆分出空内容,稍微处理⼀下同样可以实现名称和单价两列显⽰!
以下内容能看懂最好,看不懂先了解⼀下,以后我们见到List对应的函数,再唠!
= #table(2,List.Split(List.Select(Text.SplitAny(str,"<>/-"),each _<>""),2)
⾸先是选择列表中不为空的内容,然后每两个拆分为⼀组,最后转为表!
下⾯我们来谈⼀下反向获取数据!
案例3 | 反向获取
⽐如我们先获取最后⼀对“<>”中的内容,该如何处理呢?
=Text.BetweenDelimiters(str,"<",">",{0,1})
前⾯我们有讲过,给的是简化的语法,官⽅完整的语法如下:
核⼼是第四、五参数是any类型,⽽不是number数值类型,说明没有那么简单!
官⽅有⼀个案例:
案例中有:RelativePosition.FromEnd 和 RelativePosition.FromStart
其他他们是枚举类型,⽅便阅读,我们可以使⽤1和0来代替
那么具体是什么意思呢?
RelativePosition.FromStart  > 字⾯:从开始,其实就是正序(0)-默认RelativePosition.FromEnd    >字⾯:从结束,其实就是倒序(1)
现在我们看案例中的公式就好理解⼀些了!
第五参数没写,默认是0,也就是⼀段,但是相对于第四参数的第⼀段,所以是最后⼀段!如果还是不懂也没有关系,我们通过⼏个案例进⼀步巩固!
案例4 | 任意位置提取
> 倒数第2个"<",及向后数第2个“>"之间的内容!
Text.BetweenDelimiters(str,"<",">",{1,1},1)
本⽂由“壹伴编辑器”提供技术⽀持
> 倒数第三段"<>"之间的内容
完整写法:
Text.BetweenDelimiters(str,"<",">",{2,1},{0,0})
> 开始和结束都⽤倒序的情况
= Text.BetweenDelimiters(str,"<",">",{2,1},{1,1})
这⾥我们稍微解释⼀下:
1、记住倒叙的结束位置是相对于开始位置来讲的
2、索引是从0开始的,也就是1表⽰第⼀个到的位置
3、案例中,“<" ⽤的是{2,1}也就是从后往前到第3个"<" 也就是沙糖桔前⾯的"<",然后看第五参数{1,1},表⽰在第⼆参数到的位置,倒序向前到第⼆个">",然后返回之间的内容!
本⽂由“壹伴编辑器”提供技术⽀持
Text.AfterDelimiter 和 Text.BeforeDelimiter 相对Text.BetweenDelimiters要简单很多,⼀个分隔符之后的内容如果,⼀个分隔符之前的内容你这个函数都掌握了,那么他们两个肯定没有问题,这⾥就不再啰嗦了!
PowerQuery在⽂本处理⽅⾯⾮常的⽅便,常⽤的⽂本清洗完全可以胜任,在熟悉了常⽤的函数之后,可以说是随⼼所欲的清洗!
本⽂由“壹伴编辑器”提供技术⽀持
全部⽂章附件下载、海量模板分享、不限次数提问、专属答疑都在这⾥

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。