繁体   English   中英

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

[英]Regex to get the file extension

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

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

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

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

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

这是一个DEMO

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

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

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

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

您可以使用Path.GetExtension()

示例(也删除了点):

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

// extension now contains "ext"

正则表达式是

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

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


您也可以使用 LastIndexOf(".")

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

但是使用内置函数总是更方便。

为了谷歌员工的利益-

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

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

我使用的正则表达式是

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

即匹配 3 或 4 个字符的最后一个实例,仅在前面有一个点。 您可以在Regexr此处对其进行测试 不是获奖者,但成功了。

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

"\\\\.[^\\\\.]+"匹配任何以. 字符后跟 1 个或多个 no . 人物。

顺便说一句,其他人是对的,正则表达式在这里是矫枉过正。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM