从子字符串中包含特定字符的字符串中提取单词

Extract a Word from String Containing a Specific Character within Substring

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

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

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

A4:每个人都喜欢这家面包店制作的美味=蛋糕

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

A6:下了大雨 State=Oklahoma

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

B2:自制=蛋糕

B3:奶酪=蛋糕

B4:棒极了=蛋糕

B5:晚餐=昨晚

B6:州=俄克拉何马州

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

我使用了 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)

使用旧的文本解析技巧,通过 SUBSTITUTE and REPT functions 大大增加带有重复零的单词之间的距离,从而可以更大程度地滑动预期的子字符串。

B2中的公式为,

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

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