C# Regex以获取文件扩展名

C# Regex以获取文件扩展名,c#,regex,C#,Regex,我有一个包含文件名的列表(没有完整路径) List List=新列表(); 列表。添加(“文件1.doc”); 添加(“File2.pdf”); 列表。添加(“文件3.xls”); foreach(列表中的变量项){ var val=项目拆分('.'); var ext=val[1]; } 我不想使用String.Split,如何使用regex获得文件的扩展名 你可以用 示例(同时删除点): 你不需要使用正则表达式。你可以使用这个方法 返回指定路径字符串的扩展名 这里有一个。“\\.\.\.[

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

List List=新列表();
列表。添加(“文件1.doc”);
添加(“File2.pdf”);
列表。添加(“文件3.xls”);
foreach(列表中的变量项){
var val=项目拆分('.');
var ext=val[1];
}
我不想使用
String.Split
,如何使用regex获得文件的扩展名

你可以用

示例(同时删除点):


你不需要使用正则表达式。你可以使用这个方法

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

这里有一个。

“\\.\.\.[^\.]+”
匹配任何以
字符开头,后跟一个或多个无
字符的字符

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

正则表达式是对的

\.([A-Za-z0-9]+)$
转义句点、1个或多个字母数字字符、字符串结尾


您还可以使用LastIndexOf(“.”)



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

要使用regex获得扩展:

foreach (var item in list) {
    var ext = Regex.Match( item, "[^.]+$" ).Value;
}
或者,如果要确保有一个点:

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

(?为了谷歌的利益-

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

在本例中,Path.GetFileExtension()被额外的点弄糊涂了

我用的正则表达式是

\.[A-z]{3,4}$
i、 e.将最后一个3或4个字符的实例仅与前面的点匹配。您可以在此处进行测试。不是获奖者,而是完成了该技巧


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

为什么不使用Path.GetExtension?如果您只想要扩展名,那么这里的Regex就太过了。要获得正确的ext var ext=val[1];最好是:var ext=val[val.Length-1];,如果以字符串开头,当前代码作为正则表达式或任何其他方法的性能都会更好。我没有完整的文件路径。这也会解决这个问题-
\.[a-Za-z0-9]+$
int delim = fileName.LastIndexOf(".");
string ext = fileName.Substring(delim >= 0 ? delim : 0);
foreach (var item in list) {
    var ext = Regex.Match( item, "[^.]+$" ).Value;
}
@"(?<=\.)[^.]+$"
\.[A-z]{3,4}$