Answers:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
如果文件名中包含多个点,则此公式将很有用
取自另一个答案(已更改为查找点而不是空格):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
假设您的扩展名格式正确,则可以像一样快速完成此操作=RIGHT(A1,3)
。一个更可靠的解决方案是找到最右边的索引,.
然后提取其余字符。
我遇到了这个,这是我见过的最简单的解决方案...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
之所以起作用,是因为它将最后一个句点之后的所有字符与所有其他字符分隔开50个句点或您选择的任何数字。然后,您可以选择最右边的50个字符,知道自己除了扩展字符和一串句号外什么都没有选择。替换期间,您就可以开始了。
替代方案:XML解析
我有时通常用于字符串解析的一个巧妙技巧是利用该FilterXML()
函数(Excel 2013及更高版本)。基本策略是使用Substitute()
格式化XML字符串中的元素的方式格式化字符串,然后可以使用xpath语法方便地导航已解析的元素。使用此策略,获得扩展将如下所示...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
如果您不熟悉xml,这似乎令人生畏,但如果您掌握了发生的情况,我发现它比使用len(),alternate(),等更好的原因之一是因为只有一个单元格引用。
非法字符
有迹象表明,被允许在路径,但不是在XML两个字符:&
和'
如果不存在这些字符,则上述公式将起作用,否则,将需要对它们进行类似的处理...
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
例
假设我们有一个讨厌的文件路径,如下所示:
C:\ Folder1 \ Folder2 \(丑陋的字符!@#$%^()_ + = {} ;;`)\ two.dots.LongExt
1.)该Substitution()
部分会将其转换为这样的xml字符串...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.)像这样格式化后,p
使用xpath语法选择最后一个元素很简单//p[last()]
。
REGEXEXTRACT(A1, "\.([^.]*)$")