Odpowiedzi:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Ta formuła przyda się, jeśli nazwa pliku zawiera więcej niż jedną kropkę
Zaczerpnięty z innej odpowiedzi (zmieniony, aby szukać kropek, a nie spacji):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
Odpowiedź Cyryla działa tylko wtedy, gdy rozszerzenie ma 3 lub 4 znaki, a odpowiedź user273281 nie działała, gdy .
w nazwie pliku znajdowały się (kropki).
Dlatego wymyśliłem nowy sposób na osiągnięcie tego,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Uwaga: odpowiedź user273281 nie działała w przypadku, gdy nazwa pliku to 1. Macro based file.zip
. Powraca. Macro based file.zip
Zakładając, że masz ładnie sformatowane rozszerzenia, możesz to zrobić szybko jak =RIGHT(A1,3)
. Bardziej niezawodne rozwiązanie znalazłoby indeks skrajnie prawy, .
a następnie wyodrębnił pozostałe znaki.
Natknąłem się na to, jest to najprostsze rozwiązanie, jakie widziałem ...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
Działa, ponieważ oddziela wszystkie znaki po ostatnim okresie od wszystkich innych znaków o 50 okresów lub dowolną wybraną liczbę. Następnie możesz wybrać najbardziej wysunięte w prawo 50 znaków, wiedząc, że wybierasz tylko znaki rozszerzeń i kilka kropek. Zastąp okresy i gotowe.
Alternatywnie: parsowanie XML
Zgrabną sztuczką, której czasami używam do parsowania ciągów, jest wykorzystanie FilterXML()
funkcji (Excel 2013 i późniejsze). Podstawową strategią jest Substitute()
sformatowanie łańcucha w taki sposób, aby był on parsowany między elementami łańcucha xml, a następnie można użyć składni xpath do wygodnego poruszania się po parsowanych elementach. Korzystając z tej strategii, uzyskanie rozszerzenia wyglądałoby tak ...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
Jeśli nie znasz xml, może to wydawać się zastraszające, ale jeśli potrafisz zrozumieć, co się dzieje, uważam, że jest czystszy, bardziej elastyczny i łatwiejszy do zapamiętania niż alternatywne metody wykorzystujące len (), substitute (), itp. Jednym z powodów, dla których jest to przyjemniejsze, jest to, że istnieje tylko jedno odwołanie do komórki.
Nielegalne postacie
Istnieją dwa znaki, które są dozwolone w ścieżkach, ale nie w xml: &
i'
Powyższe równanie zadziała, jeśli te postacie nie będą obecne, w przeciwnym razie trzeba będzie poradzić sobie z czymś takim ...
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
Przykład
Załóżmy, że mamy nieprzyjemną ścieżkę pliku:
C: \ Folder1 \ Folder2 \ (brzydkie znaki! @ # $% ^ () _ + = {} ;;, `) \ two.dots.LongExt
1.) Substitution()
Część zamieni go na ciąg xml taki jak ten ...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.) Po sformatowaniu w ten sposób, wybranie ostatniego p
elementu przy użyciu składni xpath jest banalne //p[last()]
.
REGEXEXTRACT(A1, "\.([^.]*)$")