在 Power Query 中使用文本(子)字符串查找某些代码组合
Find certain code combinations using text (sub)string in Power Query
我有类似的问题(下面的link),但它只是对我在途中发现的问题说“附加”。
我需要的是使用子字符串作为查找来提取一个字符串中的精确匹配(或者我会说 Power Query 中的模糊匹配)。
(请忽略截图和数据中的T1和T2)
正如您在 Table 中看到的那样,3 (T3) 是主字符串,而在 T4 中是子字符串,标记略有不同(例如 JH 而不是 JH0 或其他......)这正是我需要的,按原样使用子字符串,但过滤掉主字符串并获得 T5 中的结果。
我在 Power Query 中使用模糊匹配试了试运气,但问题是之后当我有更多实例的不同子字符串时,我的查询失败,因为“列不存在等等......它必须充满活力。
我想在 Power Query 中找到解决方案!
let Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
FindList = Text.Split(Table.ReplaceValue(Table3,",","_",Replacer.ReplaceText,{"String"})[String]{0},"_"),
FindList2 = List.Transform(FindList, each Text.Remove(_,{"0".."9"})),
Newlist=Text.Split(Source[Substring]{0},"_"),
Newlist2=Text.Combine(List.Transform(Newlist, each try FindList{List.PositionOf(FindList2,_)} otherwise "missing"),"_")
in Newlist2
它在做什么 (a) 在 a 或 _ 处将 table3 拆分为一个列表 (b) 从 A 复制该列表并删除所有数字 (c) 在每个 _ (d) 匹配处将 table4 拆分为一个列表c 对 b 的每个值。如果有匹配,就用那个位置号从a中拉取值,否则放"missing"(e)把结果放在一起用逗号分隔
根据评论,适用于表 3 中多个匹配项的替代版本:
Newlist2=Text.Combine(List.Transform(Newlist, each try
if List.Count(List.PositionOf(FindList2,_,20))=0 then "missing" else
Text.Combine( List.Transform(List.PositionOf(FindList2,_,20), each FindList{_}),"_") otherwise "missing"),"_")
我有类似的问题(下面的link),但它只是对我在途中发现的问题说“附加”。
我需要的是使用子字符串作为查找来提取一个字符串中的精确匹配(或者我会说 Power Query 中的模糊匹配)。
(请忽略截图和数据中的T1和T2)
正如您在 Table 中看到的那样,3 (T3) 是主字符串,而在 T4 中是子字符串,标记略有不同(例如 JH 而不是 JH0 或其他......)这正是我需要的,按原样使用子字符串,但过滤掉主字符串并获得 T5 中的结果。
我在 Power Query 中使用模糊匹配试了试运气,但问题是之后当我有更多实例的不同子字符串时,我的查询失败,因为“列不存在等等......它必须充满活力。
我想在 Power Query 中找到解决方案!
let Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
FindList = Text.Split(Table.ReplaceValue(Table3,",","_",Replacer.ReplaceText,{"String"})[String]{0},"_"),
FindList2 = List.Transform(FindList, each Text.Remove(_,{"0".."9"})),
Newlist=Text.Split(Source[Substring]{0},"_"),
Newlist2=Text.Combine(List.Transform(Newlist, each try FindList{List.PositionOf(FindList2,_)} otherwise "missing"),"_")
in Newlist2
它在做什么 (a) 在 a 或 _ 处将 table3 拆分为一个列表 (b) 从 A 复制该列表并删除所有数字 (c) 在每个 _ (d) 匹配处将 table4 拆分为一个列表c 对 b 的每个值。如果有匹配,就用那个位置号从a中拉取值,否则放"missing"(e)把结果放在一起用逗号分隔
根据评论,适用于表 3 中多个匹配项的替代版本:
Newlist2=Text.Combine(List.Transform(Newlist, each try
if List.Count(List.PositionOf(FindList2,_,20))=0 then "missing" else
Text.Combine( List.Transform(List.PositionOf(FindList2,_,20), each FindList{_}),"_") otherwise "missing"),"_")