【问题标题】:Regex to get the file extension正则表达式获取文件扩展名
【发布时间】:2013-03-18 21:00:56
【问题描述】:

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

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?如果您只想要扩展名,那么正则表达式在这里就过分了。
  • 获得正确的分机 var ext =val[1];最好是:var ext =val[val.Length-1];,如果您以字符串开头,您当前的代码作为正则表达式或任何其他方法具有更好的性能。

标签: c# regex


【解决方案1】:

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

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

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

这是DEMO

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      你可以使用Path.GetExtension()

      示例(也删除了点):

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

      【讨论】:

      • 我没有完整的文件路径。
      【解决方案4】:

      正则表达式是

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

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


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

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

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

      【讨论】:

        【解决方案5】:

        为了谷歌员工的利益 -

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

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

        我使用的正则表达式是

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

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

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

        【讨论】:

        • 这也能解决这个问题 - \.[A-Za-z0-9]+$
        【解决方案6】:

        "\\.[^\\.]+" 匹配以. 字符开头后跟1 个或多个没有. 字符的任何内容。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-08
          • 1970-01-01
          • 2010-09-19
          • 1970-01-01
          • 2022-11-19
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          相关资源
          最近更新 更多