我有一个字符串列,我只需要每个字符串中的数字,例如
A-123 -> 123
456 -> 456
7-X89 -> 789
如何在PowerQuery中完成?
答案 0 :(得分:4)
添加列。在自定义列公式中,输入以下内容:
= Text.Select( [Column], {"0".."9"} )
其中[Column]是包含数字和其他字符的字符串列。它仅提取数字。
答案 1 :(得分:1)
首先,使用新查询在PowerQuery中创建自定义函数 - 来自其他来源 - >空白查询。打开高级编辑器并粘贴以下代码:
(source) =>
let
NumbersOnly = (char) => if Character.ToNumber(char) >=48 and Character.ToNumber(char) < 58 then char else "",
Len = Text.Length(source),
Acc = List.Accumulate(
List.Generate( () => 0, each _ < Len, each _ + 1),
"",
(acc, index) => acc& NumbersOnly(Text.At(source, index))
),
AsNumber = Number.FromText(Acc)
in
AsNumber
将此查询命名为NumbersOnly
。
现在在您的主查询中,添加另一个计算列,您可以使用源列调用此NumbersOnly函数,例如:
let
Source = Table.FromRecords({[text="A-123"], [text="456"], [text="7-X89"]}),
Result = Table.AddColumn(Source, "Values", each NumbersOnly([text]), Int64.Type)
in
Result
答案 2 :(得分:1)
另一种解决方案是在每个数字上拆分值,并从结果列表中删除空白。
此结果可用作与函数Splitter.SplitTextByEachDelimiter一起使用的新分隔符列表,以再次拆分原始文本并将结果列表与最终结果组合。
说明:Splitter.SplitTextByEachDelimiter首先在列表中的第一个分隔符上分割,然后在第二个分隔符上分割,依此类推。请注意,此函数创建一个必须使用原始字符串作为参数调用的函数,因此与S.S(分隔符)(字符串)一样。
示例代码:
let
Source = Table1,
NumbersOnly = Table.TransformColumns(Source,{{"String", (string) => Text.Combine(Splitter.SplitTextByEachDelimiter(List.Select(Text.SplitAny(string,"0123456789"), each _ <> ""))(string))}})
in
NumbersOnly