回答:
=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()、substitute()、セル参照が1つしかないため、これが優れている理由の1つです。
違法な文字
パスではなく、XMLで許可されている2つの文字があります&
し、'
上記の式は、これらの文字が存在しない場合に機能します。それ以外の場合は、次のように処理する必要があります...
=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, "\.([^.]*)$")