【问题标题】:How to extract the last part of the string in Excel after the last underscore如何在最后一个下划线之后提取Excel中字符串的最后一部分
【发布时间】:2020-08-04 21:41:16
【问题描述】:

我有以下示例数据:

1. animated_brand_300x250
2. animated_brand_300x600
3. customaffin_greenliving_solarhome_anim_outage_offer

如何从 Excel 中的最后一个下划线中提取字符串?

我想提取第一个下划线之前和最后一个下划线之后的值。

第一个下划线:

=LEFT(B6,SEARCH(“_”,B6)-1)

将返回 animatedcustomaffin 作为输出。

如何返回最后一个下划线后的字符串?

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    您可以使用RIGHT 函数找到最后一个_ 之后的字符串。棘手的部分是找到最后一个_的位置。

    首先,我们需要确定有多少个_。这可以通过删除所有_ 并比较两个字符串的长度来完成:

    LEN(A1)-LEN(SUBSTITUTE(A1;"_";""))
    

    既然我们现在知道要查找的是第二次出现的 _,我们可以使用 SUBSTITUTE 函数将第二次出现的 _ 替换为另一个字符(这必须是不是您原始字符串的一部分 - 我选择了#)。

    现在,我们使用FIND 函数来搜索# 字符的位置。这个位置现在可以传递给RIGHT 函数。

    您的最终公式将是:

    =RIGHT(A1;LEN(A1)-FIND("#";SUBSTITUTE(A1;"_";"#";LEN(A1)-LEN(SUBSTITUTE(A1;"_";"")));1))
    

    【讨论】:

    • 我只需要改变; to ,让它工作。谢谢!
    • @GerhardPowell 正确,根据您的 Windows 区域设置,您可能需要使用逗号 , 或冒号 ; 作为列表分隔符。
    【解决方案2】:

    其他一些选项可能是:

    =TRIM(RIGHT(SUBSTITUTE(A1,"_",REPT(" ",100)),100))
    

    或者使用FILTERXML,理论上是更好的选择:

    =FILTERXML("<t><s>"&SUBSTITUTE(A1,"_","</s><s>")&"</s></t>","//s[last()]")
    

    ExcelO365 独有的方法甚至可以是使用XLOOKUP

    =REPLACE(A1,1,XLOOKUP("_",MID(A1,SEQUENCE(LEN(A1)),1),SEQUENCE(LEN(A1)),,0,-1),"")
    

    或者:

    =RIGHT(A1,MATCH("_",MID(A1,SEQUENCE(LEN(A1),,LEN(A1),-1),1),0)-1)
    

    【讨论】:

    • 非常优雅的解决方案——尤其是 XML。
    • @MichaelWycisk,谢谢。如果您想了解更多关于FILTERXML 的信息,您可能会发现this 很有趣。
    • 谢谢,这很有趣。我实际上认为可以使用FILTERXML 按位置提取元素 - 但只有在阅读了您的答案之后。
    猜你喜欢
    • 2018-09-28
    • 2020-12-02
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多