【问题标题】:Extract a Word from String Containing a Specific Character within Substring从包含子字符串中特定字符的字符串中提取单词
【发布时间】:2023-03-24 02:24:01
【问题描述】:

在 MS Excel 中,我想使用公式仅从文本中包含特定字符 ("=") 的单元格中提取单词。

A2:多莉给我做了一个自制的蛋糕和一些松饼

A3:我们晚餐吃了奶酪=蛋糕

A4:每个人都喜欢面包店如何制作一些很棒的蛋糕

A5:约翰尼昨晚自己做了晚餐,然后打扫了厨房

A6:下雨很大 State=Oklahoma

我希望 (A2:A4) 列中的以下内容在 (B2:B4) 列中提供以下结果。

B2:自制=蛋糕

B3:奶酪=蛋糕

B4:真棒=蛋糕

B5:晚餐=昨晚

B6:州=俄克拉荷马州

我尝试了几种方法,有些方法比其他方法更接近,但如果可能的话,我无法弄清楚。

【问题讨论】:

    标签: string excel excel-formula text-extraction


    【解决方案1】:

    使用旧的文本解析技巧,通过SUBSTITUTEREPT functions 大大增加单词之间的距离,从而提供更大的预期子字符串滑动。

          

    B2中的公式是,

    =TRIM(MID(SUBSTITUTE(A2, " ", REPT(" ", 99)), MAX(1, FIND("=", SUBSTITUTE(A2, " ", REPT(" ", 99)))-50), 99))
    

    TRIM function(用作包装器)删除前导和尾随空格。

    【讨论】:

    • 你能告诉我9950在这个公式中的意义吗?抱歉,我听不懂。
    • SUBSTITUTE(A2, " ", REPT(" ", 99)) 将句子中的每个空格都变成了 99 个空格,因此单词非常分散开来。找到 = 符号后,我们返回 50 个字符(这应该让我们进入 99 个空格分隔符之一的中间,然后为接下来的 99 个字符收集所有内容。你只剩下 。TRIM 去掉了不需要的前导/尾随空格。如果要检索的子字符串较大,只需替换为 999 和 500。
    • 聪明的主意。感谢您的澄清。
    【解决方案2】:

    我使用了 5 个辅助列来执行此操作;它们可以折叠成一个很长的论坛,但我更喜欢这种方式(更容易追踪我认为的任何错误的来源)。给定您在 A2 中的字符串;在 B2 中找到“=”的位置

    =SEARCH("=",A2)  
    

    在 C2 中,这会找到在“=”之前的“”的实例编号

    =B2-LEN(SUBSTITUTE(MID(A2,1,B2)," ",""))  
    

    在 D2 中,它记录了那个“”的位置

    =SEARCH(CHAR(33),SUBSTITUTE(A2," ",CHAR(33),C2))  
    

    在 E2 中,这将定位在“=”之后的“”,或者如果“=”出现在单元格的最后一个单词中,它会记录整个单元格长度 +1

    =IFERROR(SEARCH(" ",A2,B2),LEN(A2)+1)  
    

    在 F2 中使用这些值将字符串从前面的“”拉到后面的“”

    =MID(A2,D2+1,E2-D2-1)
    

    【讨论】:

    • 迈克尔感谢它完美地工作 - :) 提供的两个答案都有效,但在这种情况下,更短的公式数组和仅使用一个单元格列效果最好。
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2016-05-05
    • 2023-04-03
    • 1970-01-01
    • 2018-05-13
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多