7

ファイル名を含むリストがあります(フルパスなし)

List<string> list=new List<string>();

list.Add("File1.doc");
list.Add("File2.pdf");
list.Add("File3.xls");

foreach(var item in list) {
    var val=item.Split('.');
    var ext=val[1];
}

を使いたくないのですString.Splitが、正規表現でファイルの拡張子を取得するにはどうすればよいですか?

4

6 に答える 6

15

そのために正規表現を使用する必要はありません。メソッドを使用できますPath.GetExtension

指定されたパス文字列の拡張子を返します。

string name = "notepad.exe";
string ext = Path.GetExtension(name).Replace(".", ""); // exe

ここに がありDEMOます。

于 2013-03-28T12:18:08.423 に答える
6

正規表現を使用して拡張子を取得するには:

foreach (var item in list) {
    var ext = Regex.Match( item, "[^.]+$" ).Value;
}

または、ドットがあることを確認したい場合:

@"(?<=\.)[^.]+$"
于 2013-03-28T12:38:54.557 に答える
4

を使用できますPath.GetExtension()

例 (ドットも削除):

string filename  = "MyAwesomeFileName.ext";
string extension = Path.GetExtension(filename).Replace(".", ""); 

// extension now contains "ext"
于 2013-03-28T12:17:35.960 に答える
3

正規表現は

\.([A-Za-z0-9]+)$

エスケープされたピリオド、1 つ以上の英数字、文字列の末尾


LastIndexOf(".") を使用することもできます

int delim = fileName.LastIndexOf(".");
string ext = fileName.Substring(delim >= 0 ? delim : 0);

ただし、組み込み関数を使用する方が常に便利です。

于 2013-03-28T12:24:49.713 に答える
2

Google 社員のために -

FirstPart.SecondPart.xml など、拡張子が不明な奇妙なファイル名を扱っていました。

この場合、Path.GetFileExtension() は余分なドットによって混乱しました。

私が使用した正規表現は

\.[A-z]{3,4}$

つまり、3 つまたは 4 つの文字の最後のインスタンスに一致し、前にのみドットがあります。ここでRegexrでテストできます。受賞者ではありませんが、トリックを行いました。

明らかな欠点は、2 番目の部分が 3 ~ 4 文字で、ファイルに拡張子がない場合、それが検出されることですが、私が遭遇する状況ではないことはわかっていました。

于 2013-07-17T22:47:08.470 に答える
0

"\\.[^\\.]+"characterで始まり、.その後に 1 つ以上の no.文字が続くものすべてに一致します。

ちなみに、他の人は正しいですが、ここでは正規表現はやり過ぎです。

于 2013-03-28T12:24:05.367 に答える