使用电源查询按数字字符串的最小长度从文本中提取数字

Extract numbers from text by minimum length of number string using power query

问题 我的任务是整理一些包含文本和数字混合的非常混乱的数据,并希望使用 power query 将代码与数据分开。幸运的是,需要分隔的代码仅由数值组成,长度似乎为 7 个字符(假设为 6 个或更大)。

下面是我希望如何分离数据的示例:

到目前为止: 到目前为止我有这个代码:

let
Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Input ", type text}}),
#"Replaced Value" = Table.ReplaceValue(#"Changed Type","_"," ",Replacer.ReplaceText,{"Input "}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","v"," ",Replacer.ReplaceText,{"Input "}),
#"Added Custom" = Table.AddColumn(#"Replaced Value1", "TextSplit", each Text.Split([#"Input "], " ")),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "ListTransform", each List.Transform([TextSplit], each Text.Select(_,{"0".."9"}))),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "ListSelect", each List.Select([ListTransform], each Text.Length(_)>=5)),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "TextCombine", each Text.Combine([ListSelect], ", ")),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom3",{"TextSplit", "ListTransform", "ListSelect"})

在 #“删除的列”

这似乎确实解决了问题。然而,在像 0102646v2.0 这样的情况下,这会被作为 010264620 通过。为了让它工作,我不得不介绍用“”替换_和“v”的步骤。 Power Query 是否无法识别说 0102646v2.0 应该提取为 0102646

数据:

Input Values:
3159087 v1.0
3194070 v1.0
#8102368 V3.0 (Shine and ProtectR18)
#8102371 V4.0 (Lemon 12A Degreaser)
Marine (FF3080300 v1.0)
Green Apple (FF3080301 v1.0)
0102646v2.0 (Fresh Cotton)
TDS# 3129801 V1.0 GPA Code#3123402
FF3112964 0.1 FF3145524 0.1_3152912 0.1

谢谢!

更新:拉取版本号

正则表达式

您可以 extract numbers 使用以下代码从文本中获取:

= Table.AddColumn(#"PreviousStep", "MyNumberColumn", each Text.Select([Input], {"0".."9"}))

这将为您提供字符串中相同顺序的所有数字。如果您的实际数字长度恰好是 7 个字符,您应该也可以使用 Excel 公式来提取它。

或者如果您更喜欢使用 Power Query 拆分文本,您可以

  1. 使用字符数拆分列,然后(主页 > 拆分列(下拉菜单)> 按字符数)
  2. 使用分隔符合并列(Select 列 > 转到添加列选项卡 > 合并列)

注意:您需要根据您的查询编辑 PreviousStepInput

这是使用 Regex 提取模式并以逗号分隔返回它们的 PQ 实现:

将此添加为自定义函数。我把它命名为fnRegexExtr

//see http://www.thebiccountant.com/2018/04/25/regex-in-power-bi-and-power-query-in-excel-with-java-script/
// and https://gist.github.com/Hugoberry/4948d96b45d6799c47b4b9fa1b08eadf

let   fx=(text,regex)=>
    Web.Page(
        "<script>
            var x='"&text&"';
            var y=new RegExp('"&regex&"','g');
            var b=x.match(y);
            document.write(b);
        </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

in
fx

然后您可以像这样在您的代码中使用它:

let
    Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Input", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Output", 
        each fnRegexExtr([Input], "[0-9]{6,}"))
in
    #"Added Custom"

哪个returns: