【问题标题】:Power Query - Remove text strings that contain lower case lettersPower Query - 删除包含小写字母的文本字符串
【发布时间】:2021-10-07 19:03:04
【问题描述】:

情况:我正在使用从 pdf 文件导入的数据在 Power Query 中工作,结果有点混乱。我有一列包含数字以及文本字符串。一些文本字符串是大小写混合的,包含大小写字符,而另一些则只包含大写字符。

目标:我想删除所有数字和所有大小写混合的文本字符串。最终结果应该只显示完全大写的文本字符串。

例如,我希望我的最终结果包括 IRA、IRREVOCABLE TRUST、CHARITABLE TRUST 等内容,但将 Number of Accounts、Totals、14 等内容替换为 null。

到目前为止我所尝试的:

  1. 以下内容去掉了数字和小写字符,但它并不完全有效,因为它保留了混合大小写字符串中包含的大写字符。

    Table.AddColumn(#"Added Custom2", "Account Type" each Text.Select([AccountType], {"A".."Z"," "}), type text)

  2. 下面的代码去掉了大小写混合的文本字符串,但它并不能很好地工作,因为它没有删除数字。另外,它太具体了,需要我删除包含特定单词的字符串。我希望删除所有包含小写字符的字符串。

    Table.AddColumn(#"Added Custom2", "Account Type", each if [AccountType]= null or Text.Contains([AccountType],"Totals") or Text.Contains([AccountType],"of" ) 或 Text.Contains([AccountType],"report") then null else [AccountType])

您的见解将不胜感激。我是 PowerQuery 的新用户,所以请具体详细地回答您的问题。

【问题讨论】:

    标签: powerquery


    【解决方案1】:

    由于您没有提供数据示例,因此很难确切知道您想要什么。

    • 如果单元格中有多个(以空格分隔的)字符串,则可以使用:
       #"Added Custom" = Table.AddColumn(#"Changed Type", "allCaps", each 
            Text.Combine(
                List.Accumulate(Text.Split([Column1]," "),
                                {},
                                (state, current)=>  
                                    if List.ContainsAny(
                                            Text.ToList(current),
                                                {"0".."9","a".."z",",",":","?","/","\"," "}) 
                                    then state 
                                    else state & {current}),", "))
    
    • 如果单元格中只有一个字符串,则可以使用
      #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each 
            if List.ContainsAny(
                    Text.ToList([Column1]),
                    {"0".."9","a".."z",",",":","?","/","\"," "}) 
            then null 
            else [Column1])
    

    然后你可以通过取消选择添加列中的null进行过滤

    在每种情况下,#"Changed Type" 都是上一步。如果您的代码中不是这种情况,请替换为上一步的实际名称

    【讨论】:

    • 我编辑了我的问题以包含一些示例。在尝试您提供的第一个代码时,我遇到了语法错误(应为标记逗号)。这正是我输入的内容: = #"Added Custom" = Table.AddColumn(#"Added Custom2", "Account Type", each Text.Combine(List.Accumulate(Text.Split([AccountTypeHelperColumn]," "), {}, (state, current) => if List.ContainsAny(Text.ToList(current),{"0".."9","a".."z",",",":"," ?","/","\",",""}) 然后声明 else state & {current]),", "))
    • @Qqqqq 您在输入的内容中有几个错误。我建议您从我发布的代码中复制/粘贴,然后编辑相关参考。或者将其输入到add Column 对话框(在 each 之后开始)并在那里编辑相关引用。
    • 嗯,好的。我使用了复制/粘贴,语法错误消失了,但结果列只显示每个单元格中的错误。
    • @Qqqqq 是什么错误?
    • 我怎么知道?
    【解决方案2】:

    第一个公式只查找所有不包含数字的大写字母

    = if [Column1] = Text.Remove ([Column1],{"0".."9","a".."z"}) then [Column1] else null
    

    第二个公式删除所有数字,然后查找所有不包含数字的大写字母

    = if Text.Remove ([Column1],{"0".."9"}) = Text.Remove ([Column1],{"a".."z","0".."9"}) then Text.Remove ([Column1],{"0".."9"}) else null
    

    let  Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Column1] = Text.Remove ([Column1],{"0".."9","a".."z"}) then [Column1] else null),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom2", each if Text.Remove ([Column1],{"0".."9"}) = Text.Remove ([Column1],{"a".."z","0".."9"}) then Text.Remove ([Column1],{"0".."9"}) else null)
    in  #"Added Custom1"
    

    ~~~

    如果您要从单词列表中解析单词......

    这会保留 (a) 在之前或之后没有数字的单词,并且 (b) 都是大写的

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each 
    Text.Combine(
        List.RemoveNulls(
            List.Transform(Text.Split([Column1]," "), each 
            if  _ = Text.Remove (_,{"a".."z","0".."9"}) then _ else null
            ))," "))
    in #"Added Custom"
    

    这会删除所有数字,然后保留所有大写的单词

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each 
    Text.Combine(
        List.RemoveNulls(
            List.Transform(Text.Split(Text.Remove ([Column1],{"0".."9"})," "), each 
            if  _ = Text.Remove (_,{"a".."z"}) then _ else null
            ))," "))
    in #"Added Custom"
    

    【讨论】:

    • 第一个公式可能更像我正在寻找的。我不需要解析任何内容,只需消除所有不是大写文本字符串的内容。不幸的是,当我尝试使用您的公式时,我得到了一列充满错误值的列。
    • 也许向 Ron 和我展示您的示例输入数据和当前代码。我们知道我们的代码有效,这是一个实施问题
    猜你喜欢
    • 2019-04-11
    • 2013-04-28
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多