本期案例是对数据中的数字进行脱敏处理,前后转换效果如下:
解题套路
1.Text.SplitAny
解题思路:根据数字进行拆分,然后使用分隔符“*”进行合并。
Table.AddColumn(源,"脱敏数据",each Text.Combine(Text.SplitAny([数据],Text.Combine({"0".."9"})),"*"))
2.Text.ToList
解题思路:转成列表,逐个进行判断,对于是数字型的进行替换,其余字符保持不变。
Table.AddColumn(源,"脱敏数据",each Text.Combine(List.Transform(Text.ToList([数据]),(x)=>if List.Contains({"0".."9"},x) then "*" else x)))
3.List.Accumulate
解题思路1:遍历0到9的数字,对字符串进行替换操作。
Table.AddColumn(源,"脱敏数据",each List.Accumulate({"0".."9"},[数据],(x,y)=>Text.Replace(x,y,"*")))
解题思路2:对数字与其他字符进行分组处理,当出现其他字符的时候,对临时中转的数字根据长度替换为分隔符,其余直接进行连接。
Table.AddColumn(源,"脱敏数据",each List.Accumulate(Text.ToList([数据]),{"",""},(x,y)=>if List.Contains({"0".."9"},y) then {x{0},x{1}&y} else {x{0}&Text.Repeat("*",Text.Length(x{1}))&y,""}){0})
解题思路3:判断0到9的数字在字符串中的位置,然后根据位置进行替换。
Table.AddColumn(源,"脱敏数据",each List.Accumulate(List.Combine(List.Transform({"0".."9"},(x)=>Text.PositionOf([数据],x,2))),[数据],(s,c)=>Text.ReplaceRange(s,c,1,"*")))
4.List.ReplaceMatchingItems
解题思路1:函数是按组进行替换的,这里可以根据0-9的数字进行遍历构造,然后进行替换。
Table.AddColumn(源,"脱敏数据",each Text.Combine(List.ReplaceMatchingItems(Text.ToList([数据]),List.Transform({"0".."9"},each {_,"*"}))))
解题思路2:是对前述的简写,这里使用了函数的第三参数,构造了一个比较器,只要满足是数字的就进行替换。
Table.AddColumn(源,"脱敏数据",each Text.Combine(List.ReplaceMatchingItems(Text.ToList([数据]),{{"0","*"}},each _>"A")))
5.Table.Group
解题思路:对字符按数字与其他字符进行分组,对于数字的,对于深化的Value列删除首项,并连接分隔符,其他的直接深化即可。
Table.AddColumn(源,"脱敏数据",each Text.Combine(List.Combine(Table.Group(Table.FromValue(Text.ToList([数据])),"Value",{"a",each if List.Contains({"0".."9"},[Value]{0}) then {"*"}&List.Skip([Value]) else [Value]},0,(x,y)=>Number.From(y<"A"))[a])))
其他组合方式不在赘述。
以上是本期内容。
页面更新:2024-05-02
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号