Ответы:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Эта формула будет полезна, если у вас есть более одной точки в имени файла
Взято из другого ответа (изменено для поиска точек, а не пробелов):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
Кирилл ответ работает только в том случае, если расширение составляет 3 или 4 символа, а ответ user273281 не работал, когда .
в имени файла были (точки).
Поэтому я нашел новый способ достижения этого,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Примечание: aswer user273281 не работает для случая, когда имя файла было 1. Macro based file.zip
. Возвращается. Macro based file.zip
Если у вас есть красиво отформатированные расширения, вы можете сделать это быстро, как =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 (), substitute (), и т. д. Одна из причин, почему это лучше, потому что есть только одна ссылка на ячейку.
Незаконные персонажи
Есть два символа, которые разрешены в путях, но не в 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, "\.([^.]*)$")