如何在Power Query中以换行后接非空格字符为分隔符拆分列到行?
在Power Query中实现指定规则的文本拆分
核心思路
Power Query原生不支持正则,我们换个逻辑实现:先把文本按换行符拆成单行列表,再将开头带空格的行合并到上一个非空格行,最后把合并后的结果转成多行记录。
具体操作步骤
假设你的原始数据列名为原始内容,按以下步骤操作:
- 选中目标列,进入Power Query编辑器(数据选项卡→从表格/区域)
- 添加自定义列,输入以下M代码:
= let // 按换行符拆分文本为单行列表 SplitLines = Text.Split([原始内容], "#(lf)"), // 遍历列表,合并连续的缩进行 GroupedLines = List.Accumulate(SplitLines, {}, (state, current) => if Text.StartsWith(current, " ") then // 当前行是缩进行,合并到最后一个分组 List.RemoveLastN(state, 1) & {List.Last(state) & "#(lf)" & current} else // 当前行是新分组的起始行,新增分组 state & {current} ) in // 将分组后的列表转成表格,实现拆分行 Table.FromList(GroupedLines, Splitter.SplitByNothing(), {"拆分后内容"})
- 展开这个自定义列的结果,就能得到目标输出:第一行包含前三项带换行的内容,第二行是最后一项内容
代码逻辑说明
Text.Split([原始内容], "#(lf)"):把单元格内的多行文本拆分为每行一个元素的列表List.Accumulate:遍历列表逐个处理每行内容,自动判断是否需要合并到上一行Table.FromList:将分组后的列表转换为表格,完成拆分行的最终效果
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

