正则表达式获取文件扩展名

时间:2013-03-28 12:16:24

标签: c# regex

我有一个包含文件名的列表(没有完整路径)

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,如何使用正则表达式获取文件的扩展名?

6 个答案:

答案 0 :(得分:13)

您不需要使用正则表达式。您可以使用Path.GetExtension方法。

  

返回指定路径字符串的扩展名。

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

这是DEMO

答案 1 :(得分:4)

您可以使用Path.GetExtension()

示例(也删除了点):

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

// extension now contains "ext"

答案 2 :(得分:3)

使用正则表达式获取扩展名:

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

或者如果你想确保有一个点:

@"(?<=\.)[^.]+$"

答案 3 :(得分:2)

正则表达式是

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

转义句点,1个或多个字母数字字符,字符串结尾


您也可以使用LastIndexOf(“。”)

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

但使用内置功能总是更方便。

答案 4 :(得分:0)

“\。[^ \。] +”匹配任何以'。'开头的内容。字符后跟1或更多没有'。'字符。

顺便说一下其他人是正确的,正则表达式在这里是过度的。

答案 5 :(得分:0)

为了googlers的利益 -

我正在处理奇怪的文件名,例如FirstPart.SecondPart.xml,扩展名未知。

在这种情况下,Path.GetFileExtension()被额外的点弄糊涂了。

我使用的正则表达式是

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

即。将最后一个3或4个字符的实例与前面的点匹配。您可以在Regexr处进行测试。不是获奖者,而是诀窍。

明显的缺陷是,如果第二部分是3-4个字符并且文件没有扩展名,那么它会选择它,但是我知道这不是我会遇到的情况。