是否有一种有效的方法来识别字符串中使用基函数的最后一个字符/字符串匹配?也就是说,不是字符串的最后一个字符/字符串,而是字符/字符串在字符串中最后出现的位置。搜索和查找都从左到右工作,所以我不知道如何应用没有冗长的递归算法。现在看来,这种解决方案已经过时了。


当前回答

我想我明白你的意思了。假设你想要下面字符串中最右边的\(存储在A1单元格中):

驱动器:\ \子文件夹Filename文件夹。请拨分机

为了得到最后一个\的位置,你可以使用这个公式:

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

这告诉我们最右边的\在第24个字符。它通过查找“@”并将最后一个“\”替换为“@”来实现这一点。它通过使用来确定最后一个

(len(string)-len(substitute(string, substring, "")))\len(substring)

在这种情况下,子字符串就是长度为1的“\”,所以你可以在结尾省去除法,只使用:

=FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))

现在我们可以使用它来获取文件夹路径:

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

下面是没有结尾\的文件夹路径

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))-1)

要获得文件名:

=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

但是,这里有一个替代版本,可以使所有内容都位于特定字符的最后一个实例的右侧。所以使用我们同样的例子,这也会返回文件名:

=TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),LEN(A1)))

其他回答

在VBA中一个简单的方法是:

YourText = "c:\excel\text.txt"
xString = Mid(YourText, 2 + Len(YourText) - InStr(StrReverse(YourText), "\" ))

我想我明白你的意思了。假设你想要下面字符串中最右边的\(存储在A1单元格中):

驱动器:\ \子文件夹Filename文件夹。请拨分机

为了得到最后一个\的位置,你可以使用这个公式:

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

这告诉我们最右边的\在第24个字符。它通过查找“@”并将最后一个“\”替换为“@”来实现这一点。它通过使用来确定最后一个

(len(string)-len(substitute(string, substring, "")))\len(substring)

在这种情况下,子字符串就是长度为1的“\”,所以你可以在结尾省去除法,只使用:

=FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))

现在我们可以使用它来获取文件夹路径:

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

下面是没有结尾\的文件夹路径

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))-1)

要获得文件名:

=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

但是,这里有一个替代版本,可以使所有内容都位于特定字符的最后一个实例的右侧。所以使用我们同样的例子,这也会返回文件名:

=TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),LEN(A1)))

您可以使用我创建的这个函数来查找字符串中的字符串的最后一个实例。

当然,公认的Excel公式是可行的,但它太难以阅读和使用。在某种程度上,你必须把它分解成更小的块,这样它才可维护。下面的函数是可读的,但这无关紧要,因为您在使用命名参数的公式中调用它。这使得使用它很简单。

Public Function FindLastCharOccurence(fromText As String, searchChar As String) As Integer
Dim lastOccur As Integer
lastOccur = -1
Dim i As Integer
i = 0
For i = Len(fromText) To 1 Step -1
    If Mid(fromText, i, 1) = searchChar Then
        lastOccur = i
        Exit For
    End If
Next i

FindLastCharOccurence = lastOccur
End Function

我是这样使用的:

=RIGHT(A2, LEN(A2) - FindLastCharOccurence(A2, "\"))

如果您只查找字符“~”的最后一个实例的位置,那么 = len(替代(字符串 ,"~",""))+ 1

我确信有一个版本将与字符串的最后一个实例一起工作,但我必须回去工作。

单元格A1 =查找/the/position/的/最后一个斜杠

简单的方法是反转文本,然后找到第一个斜杠。现在你可以得到全文的长度减去这个数字。

像这样:

=LEN(A1)-FIND(“/”,REVERSETEXT(A1),1)+1

返回最后一个/的位置21