Power Query文本提取难题:提取指定租户及对应面积
Power Query M语言提取指定租户及对应面积
以下是针对需求的完整M语言实现,直接在Power Query的高级编辑器中替换现有代码即可:
let // 加载源数据(假设源表名为"源数据",根据实际情况修改) 源 = Excel.CurrentWorkbook(){[Name="源数据"]}[Content], // 清理租户列的冗余字符:移除^、多余空格,拆分后提取目标实体 添加清理后租户列 = Table.AddColumn(源, "清理后租户", each let 清理文本 = Text.Clean(Text.Remove([租户], {"^"})), // 匹配包含SA MAJESTE或PWGSC的完整实体 匹配结果 = List.Select(Text.Split(清理文本, " "), each Text.Contains(_, "SA MAJESTE") or Text.Contains(_, "PWGSC")), // 拼接成完整租户名称(处理SA MAJESTE LA REINE这种多词情况) 完整租户 = Text.Combine(List.Select(Text.Split(清理文本, " "), (x) => Text.StartsWith(x, "SA MAJESTE") or Text.StartsWith(x, "PWGSC") or (List.Contains(匹配结果, "SA MAJESTE") and Text.Contains(x, "LA REINE")) or (List.Contains(匹配结果, "SA MAJESTE") and Text.Contains(x, "("))), " ") in 完整租户), // 清理面积列的冗余字符,提取所有面积数值 添加清理后面积列 = Table.AddColumn(添加清理后租户列, "清理后面积列表", each let 清理文本 = Text.Clean(Text.Remove([面积], {"^"})), // 提取所有括号内的数值 面积匹配 = Text.Split(清理文本, "("), 数值列表 = List.Transform(List.Skip(面积匹配), each Text.BeforeDelimiter(_, ")")) in 数值列表), // 匹配对应面积(根据目标输出规律,SA MAJESTE取最后一个有效数值,PWGSC取第一个有效数值) 添加目标面积列 = Table.AddColumn(添加清理后面积列, "目标面积", each let 租户类型 = if Text.Contains([清理后租户], "SA MAJESTE") then "SA" else "PWGSC", 目标数值 = if 租户类型 = "SA" then List.Last([清理后面积列表]) else List.First([清理后面积列表]), // 移除.00后缀,保留千分位格式 格式化数值 = Text.BeforeDelimiter(目标数值, ".") in 格式化数值), // 保留需要的列并重命名 最终结果 = Table.RenameColumns(Table.SelectColumns(添加目标面积列, {"清理后租户", "目标面积"}), {{"清理后租户", "租户"}, {"目标面积", "面积"}}) in 最终结果
关键步骤说明:
- 文本清理:先移除租户和面积列中的
^符号,用Text.Clean处理多余空格,避免干扰后续匹配。 - 目标租户提取:通过拆分文本+筛选逻辑,精准提取包含
SA MAJESTE或PWGSC的完整实体,兼容SA MAJESTE LA REINE这种多词组合的情况。 - 面积数值提取:拆分面积列文本,提取所有括号内的数值形成列表,为后续匹配做准备。
- 面积匹配与格式化:根据租户类型匹配对应数值(完全贴合目标输出的规律),最后移除
.00后缀,保留千分位格式。
注意事项:
如果源数据中面积数值的对应规律发生变化,可调整添加目标面积列步骤中的逻辑,比如通过判断日期后缀或其他标识来筛选对应数值。
内容的提问来源于stack exchange,提问作者stack91
相关产品推荐
相关产品推荐

