Power BI 查询 - 将分隔符之间的文本提取到新列
Posted
技术标签:
【中文标题】Power BI 查询 - 将分隔符之间的文本提取到新列【英文标题】:Power BI Query - Extract text between delimiters to a new column 【发布时间】: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-\d4,] \w+$", "^.*[ABC-\d4,].*$", "^.*\[[a-cA-C ]-\d4,\].*$" 谢谢。我解决了: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 你的回答看起来很棒!在 *** 上建议,如果您找到问题的答案,请自行添加答案 ***.com/help/self-answer 。顺便说一句,如果速度很重要,也许你可以避免使用Text.Contains()
函数,只需调用一次Text.PositionOf([TextColumn], "[ABC-")
;如果未找到子字符串,PositionOf 将返回 -1。
【参考方案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
会导致更快。
谢谢
【讨论】:
以上是关于Power BI 查询 - 将分隔符之间的文本提取到新列的主要内容,如果未能解决你的问题,请参考以下文章