是否有一种有效的方法来识别字符串中使用基函数的最后一个字符/字符串匹配?也就是说,不是字符串的最后一个字符/字符串,而是字符/字符串在字符串中最后出现的位置。搜索和查找都从左到右工作,所以我不知道如何应用没有冗长的递归算法。现在看来,这种解决方案已经过时了。
当前回答
我想我明白你的意思了。假设你想要下面字符串中最右边的\(存储在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), "\" ))
如果您只查找字符“~”的最后一个实例的位置,那么 = len(替代(字符串 ,"~",""))+ 1
我确信有一个版本将与字符串的最后一个实例一起工作,但我必须回去工作。
如何创建一个自定义函数并在您的公式中使用它?VBA有一个内置的函数,InStrRev,它所做的正是您正在寻找的。
把这个放到一个新模块中:
Function RSearch(str As String, find As String)
RSearch = InStrRev(str, find)
End Function
你的函数看起来像这样(假设原始字符串在B1中):
=LEFT(B1,RSearch(B1,"\"))
考虑到@SSilk所做的评论的一部分,我的最终目标真的是让一切都正确的最后一次出现,一个非常简单的公式的替代方法是复制字符串的列(说a),并在副本(说ColumnB)应用查找和替换。以驱动器:\文件夹\子文件夹\文件名.ext为例
这将返回所选择字符(这里\)的最后一个实例(这里是\)之后的剩余内容(这里是Filename.ext),这有时是目标,并且有助于用一个简短的公式找到最后一个这样的字符的位置,例如:
=FIND(B1,A1)-1
在新版本的Excel(2013年及以上)中,闪光填充可能是一个简单而快速的解决方案:在Excel中使用闪光填充 .
推荐文章
- Excel:匹配字符串中的最后一个字符/字符串
- .text, .value和.value2之间的区别是什么?
- 从c#读取Excel文件
- 检查单元格是否包含子字符串
- 在Excel中从公式返回空单元格
- 熊猫:在excel文件中查找表格列表
- 循环通过文件夹中的文件使用VBA?
- 将公式应用到Excel中的整个列的快捷方式
- 在现有Excel值中添加前导0 /0到一定长度
- 如何从一个VBA函数返回一个结果
- 如何在Excel中创建包含双引号的字符串或公式?
- 使用Pandas对同一工作簿的多个工作表进行pd.read_excel()
- 在Linux中用命令行将xlsx转换为csv
- 设置excel文档的mime类型
- excel文件的正确内容类型是什么?