Excel - Power Query TrimStart With 条件

Excel - Power Query TrimStart With condition

我想要 trim 2 个字符。如果以“20”开头

https://i.stack.imgur.com/MlmmE.png

您可以测试文本是否以“20”开头,如果是,则return“20”之后的文本:

if Text.StartsWith(Example, "20") then Text.AfterDelimiter(Example,"20") else Example

编辑后的答案:

类似的方法,但此步骤会转换 table 列中的值。更改 SourceMyValue 引用以适应。

= Table.TransformColumns(Source, {{"MyValue", each Number.From(let x = Number.ToText(_) in if Text.Start(x,2) = "20" then Text.AfterDelimiter(x,"20") else x), type number}})

我从一个看起来像这样的基本文本文件开始...

Example
20456 208899 123 366420
20324 535435 654 533454
852 929492 583 283832

...为了透明起见并向您展示我是如何度过难关的,下面概述了所有步骤。我怀疑这可以以更有效的方式完成,但它完成了工作。

步骤 1

第 2 步

步骤 3

= Table.AddColumn(
#"Promoted Headers", 
"Result", 
each if Text.StartsWith([Example], "20") then Text.Middle([Example], 2) else [Example])

第 4 步

第 5 步(结果)

  • 将您的字符串按 space 拆分成一个列表。
  • 通过检查每个元素是否以 20
  • 开头来转换列表

例如:作为添加的列:

   #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", 
        each 
            Text.Combine(
                List.Transform(
                    Text.Split([Column1]," "), 
                        each 
                            if Text.StartsWith(_,"20") 
                            then Text.Middle(_,2) 
                            else _)," ")
            )

原件和结果

注:
如果不想添加列,可以用相同的算法转换已有的列,但需要使用高级编辑器输入代码:

    trim20 = Table.TransformColumns(#"Previous Step", {"Column1", (c)=> 
        Text.Combine(
            List.Transform(Text.Split(c," "), 
                each if Text.StartsWith(_,"20") then Text.Middle(_,2) else _)," ")})

如果直接在 sheet 上进行操作,非常简单。

=IF(LEFT(A1,2) = "20", MID(A1, 3, 1000), A1)