【发布时间】:2022-01-23 12:39:33
【问题描述】:
假设我在一列中有一行文本:
“流程”“DIT-Start-Auto Generate Incidents””在 DF Operations 中启动。
见
从上面的文本中,我只想使用模式 INC 提取 INC3294144,其中 INC (3294144) 之后的剩余部分是动态的并且会随着场景而变化。
【问题讨论】:
标签: powerbi powerquery
假设我在一列中有一行文本:
“流程”“DIT-Start-Auto Generate Incidents””在 DF Operations 中启动。
见
从上面的文本中,我只想使用模式 INC 提取 INC3294144,其中 INC (3294144) 之后的剩余部分是动态的并且会随着场景而变化。
【问题讨论】:
标签: powerbi powerquery
在 Power Query 中,您可以使用以下代码创建新的自定义列-
Text.Start( Text.Range([your_column_name],Text.PositionOf([your_column_name],"INC")),Text.PositionOf(Text.Range([your_column_name],Text.PositionOf([your_column_name],"INC"))," "))
如果文本中没有 INC,则返回 null,请在下面使用 -
if Text.PositionOf([your_column_name],"INC") = -1 then
null
else
Text.Start( Text.Range([your_column_name],Text.PositionOf([your_column_name],"INC")),Text.PositionOf(Text.Range([your_column_name],Text.PositionOf([your_column_name],"INC"))," "))
输出将如下所示-
【讨论】:
从您的问题中很难判断所有数据是否都是您正在检查的一个单元格?
如果是这样,您可以使用自定义列来检查名为 a
的列= try Text.Middle([a],Text.PositionOf([a],"INC"),Text.PositionOf(Text.Middle([a],Text.PositionOf([a],"INC"),999)," ")) otherwise null
【讨论】:
你实际上可以使用正则表达式
//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('"®ex&"','g');
var b=x.match(y);
document.write(b);
</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
fx
fnRegex
#"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "INC", each fnRegex([Column1], "INC[0-9]+"))
【讨论】:
我认为一个简单的 Text.BetweenDelimiters 应该在这里工作:
Text.BetweenDelimiters([TextCol], "app? ", " service=")
如果没有匹配,这将返回一个空字符串。
当然,这确实取决于这些分隔符的存在,并且您可能需要像这样不那么严格的匹配条件(这仍然会做出一些在您的特定情况下可能不成立的假设):
Text.BetweenDelimiters([TextCol], "? ", " ")
【讨论】: