Power Query拆分含复合航空公司名称的无分隔符列优化方案问询
精准拆分无分隔符航司名称的优雅方案
核心思路是基于已知航司名单做精准匹配提取,彻底避免大小写拆分的误判问题,而且新增航司只需更新名单,不用改流程:
1. 准备完整的航司名称列表
可以直接在Power Query里创建,或者从Excel导入现成的名单,示例代码:
let 航司名单 = {"American Airlines", "British Airways", "Finnair", "AlphaSky", "KLM", "ANA"} in 航司名单
如果航司名称存在大小写不统一的情况,后续可统一转成小写匹配,不影响最终提取的原名称
2. 编写递归拆分函数
这个函数会从拼接字符串里逐个匹配航司名称,提取后删除已匹配的部分,直到字符串拆分完成:
(待拆文本 as text, 航司列表 as list) as list => let 找到的航司 = List.FindFirst(航司列表, each Text.StartsWith(待拆文本, _)), 拆分结果 = if 找到的航司 = null then {} else {找到的航司} & @(Text.Remove(待拆文本, 找到的航司), 航司列表) in 拆分结果
若担心大小写差异导致匹配失败,可把Text.StartsWith(待拆文本, _)修改为Text.StartsWith(Text.Lower(待拆文本), Text.Lower(_))
3. 应用函数到目标列
在Power Query中添加自定义列,调用上述函数:
= 自定义拆分函数([你的拼接列名], 航司名单)
之后将生成的列表列展开成行或列,即可得到拆分好的单个航司名称。
额外优化
如果存在航司名称是另一个名称子串的情况(比如"Air"和"Air France"),先把航司名单按名称长度从长到短排序,优先匹配长名称,避免误拆:
排序后的航司名单 = List.Sort(航司名单, (a,b) => Text.Length(b) - Text.Length(a))
内容的提问来源于stack exchange,提问作者Chris Chapman
相关产品推荐
相关产品推荐

