【问题标题】:Power BI Query - Extract text between delimiters to a new columnPower BI 查询 - 将分隔符之间的文本提取到新列
【发布时间】:2016-09-05 07:50:03
【问题描述】:

我有一个表格,其中包含以下格式的文本列:

"随机文本[ABC-######]其他随机文本"

对于包含“[ABC-”的所有行,我想将“ABC-######”提取到新列,其中###### 是随机数,至少 4 个数字,但可以是更多。

这是我迄今为止的工作:

= Table.AddColumn(#"Changed Type", "Custom", each if Text.Contains([TextColumn], "[ABC") then "FOUND" else "NotFound")

但我无法提取带有数字的子字符串。

谁能帮帮我? 谢谢 dk

【问题讨论】:

  • 一些澄清问题:方括号是任何字符串的一部分吗?任何可能的字符串是否包含“ABC-”哪个正则表达式匹配任何源字符串? "^\w+ [ABC-\d{4,}] \w+$", "^.*[ABC-\d{4,}].*$", "^.*\[[a-cA-C ]-\d{4,}\].*$"
  • 谢谢。我解决了:each if Text.Contains([TextColumn], "[ABC-") then (Text.Range((Text.Range([TextColumn], (Text.PositionOf([TextColumn], "[ABC-", Occurrence.First))+1, 14)), 0, (Text.PositionOf((Text.Range([TextColumn], (Text.PositionOf([TextColumn], "[ABC-", Occurrence.First))+1, 14)), "]", Occurrence.First)))) else "None") 它可能看起来不是最好的解决方案,但它正在工作,可能有计算更好的解决方案。我不需要提取“[”“]”,只需要提取 ABC 和字符,直到后面的“]”。
  • @d82k 你的回答看起来很棒!在 StackOverflow 上建议,如果您找到问题的答案,请自行添加答案 stackoverflow.com/help/self-answer 。顺便说一句,如果速度很重要,也许你可以避免使用Text.Contains() 函数,只需调用一次Text.PositionOf([TextColumn], "[ABC-");如果未找到子字符串,PositionOf 将返回 -1。

标签: powerbi powerquery


【解决方案1】:


不太复杂的版本

let
    tbl = #table({"TextColumn"}, {
        {"qwer"},
        {"qwer [ABC-1234] asdf"},
        {"qwer [ABC-1234]"},
        {"[ABC-1234] asdf"}
    }),
    AddColumn = Table.AddColumn(tbl, "ExtractedNumber", each try Splitter.SplitTextByEachDelimiter({"[ABC-","]"})([TextColumn]){1} otherwise "None")
in
    AddColumn


应该是这样的

【讨论】:

    【解决方案2】:

    解决方法:

    = Table.AddColumn(#"Changed Type", "Custom", each 
    if Text.Contains([TextColumn], "[ABC-") then
    (Text.Range((Text.Range([TextColumn], (Text.PositionOf([TextColumn], "[ABC-", Occurrence.First))+1, 14)), 0, (Text.PositionOf((Text.Range([TextColumn], (Text.PositionOf([TextColumn], "[ABC-", Occurrence.First))+1, 14)), "]", Occurrence.First))))
    else "None")
    

    按照 cmets 的建议

     Text.PositionOf
    

    会导致更快。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多