在Power Query中使用换行符将列拆分为行,后跟空格以外的任何内容作为分隔符

Splitting a Column into Rows in Power Query using Line Feed followed by Anything but a Space as a Delimiter

提问人:Dave 提问时间:10/25/2023 最后编辑:horseyrideDave 更新时间:10/25/2023 访问量:50

问:

在 Excel 的 Power Query 工具中,我需要执行以下操作:

输入数据

数据
foo1.SUB1
foo1.SUB1.1
foo1.SUB1.2
foo1.SUB2

输出数据

数据
foo1.SUB1
foo1.SUB1.1
foo1.SUB1.2
foo1.SUB2

换句话说,我需要将一列拆分为几行,其中分隔符是换行符(在 Power Query 中由 #(lf) 表示),后跟空格以外的任何字符。

如果Power Query接受分隔符中的正则表达式,我将使用.#(lf)[^ ]

换句话说,我想创建这个应用步骤:

Split Column into Rows

但是,Power Query无法理解正则表达式。

有什么方法可以做到这一点吗?

Excel PowerQuery M

评论


答:

2赞 horseyride 10/25/2023 #1

在powerquery中作弊的一种方法是在换行符上拆分,检查每行的第一个字符是否有空格,然后重新组合

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Column1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
#"Added Index" = Table.AddIndexColumn(#"Split Column by Delimiter", "Index", 0, 1, Int64.Type),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each if Text.Start([Column1],1)<>" " then [Index] else null),
#"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
#"Grouped Rows" = Table.Group(#"Filled Down", {"Custom"}, {{"New", each Text.Combine(List.Transform([Column1], Text.From), "#(lf)"), type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Custom"})
in #"Removed Columns"

当粘贴回 excel 时,请记住启用自动换行

enter image description here

实际上,您可以在powerquery中使用正则表达式,但它们很痛苦,很慢,而且这里似乎不需要