将文本中的两个单词提取到字符串中分隔符值的左侧

Extract text two words to the LEFT of Delimiter value within string

此问题与之前发布的 Excel 问题不重复,而是寻求提取定界符左侧的单词;而之前发布的问题 Extracts words to Right of Delimiter.

使用 MS Excel,我想提取两个单词(三个空格)到定界符值“^”的左侧,包括用 attached/associated 和定界符“^”提取标识符词

示例:单元格 A2

约翰尼和我本来打算去看电影看 ^Batman Returns,但已经晚了。

结果:单元格 B2

看^蝙蝠侠

非VBA 公式方法是可能的(可能作为数组公式),但就像用黄油刀制作雕塑一样。这是一个可以用作 UDF 的 VBA 函数:

Function ExtractLeft(str As String, delim As String, words As Long) As String
    Dim i As Long, n As Long
    Dim A As Variant
    Dim left_words As String, right_word As String

    A = Split(str, delim)
    right_word = A(1)
    right_word = Split(right_word)(0)
    right_word = delim & right_word
    left_words = A(0)
    A = Split(Trim(left_words))
    n = UBound(A)
    For i = n To n - words + 1 Step -1
        right_word = A(i) & " " & right_word
    Next i
    ExtractLeft = right_word
End Function

VBA 方法的优点是您可以轻松更改分隔符和要提取的字数:

可能有一些更好的解决方案,但这是我所拥有的:

=MID(LEFT(A1,FIND(" ",A1;FIND("^",A1))-1),FIND("^",SUBSTITUTE(A1," ","^",LEN(LEFT(A1,FIND("^",A1)))-LEN(SUBSTITUTE(LEFT(A1,FIND("^",A1))," ",""))-2))+1,9999)

核心是:LEN(LEFT(A1,FIND("^",A1)))-LEN(SUBSTITUTE(LEFT(A1,FIND("^",A1))," ",""))
它计算从字符串开始到你的定界符的 spaces,然后用另一个定界符替换 count - 2 space# 以找到你的开始 FIND("^",SUBSTITUTE(A1," ","^",LEN(...)-LEN(...)-2))+1 对一个较早结束的字符串执行此操作LEFT(A1,FIND(" ",A1;FIND("^",A1))-1)(长线不需要再做第二次)