C#:根据正则表达式获取所有文件

时间:2018-05-22 08:16:56

标签: c# regex

我有一个包含多个Zip文件的文件夹,这些文件具有不同的命名约定。

  1. 1.zip
  2. Hello.zip
  3. SomeNameWithAnyCharacter-Xal_Yal_Zal_12345-20180518-152147535.zip
  4. 我想获得所有低于命名约定的zip文件:

    [SomeNameWithAnyCharacter]-[Xal_Yal_Zal_][yyyyMMdd][HHmmssfff]
    

    如何在C#,

    中为以下代码应用 regex
    var allFiles = Directory
      .GetFiles(@"C:\FilePath", "*.zip")
      .Select(f => new FileInfo(f))
      .OrderByDescending(fi => fi.LastWriteTimeUtc);
    

1 个答案:

答案 0 :(得分:4)

添加Where所需的正则表达式

  var allFiles = Directory
    .EnumerateFiles(@"C:\FilePath", "*.zip")
    .Where(file => Regex.IsMatch(
        Path.GetFileNameWithoutExtension(file),   // match file name
      @"Xal_Yal_Zal_[0-9]+-[0-9]{8}-[0-9]{9}$"))  // with the required regex
    .Select(file => new FileInfo(file))
    .OrderByDescending(fi => fi.LastWriteTimeUtc);

模式:Xal_Yal_Zal_[0-9]+-[0-9]{8}-[0-9]{9}$解释:

Xal_Yal_Zal_ - Xal_Yal_Zal_ 
[0-9]+       - one or more digits 0..9
-            - minus sign
[0-9]{8}     - 8 digits 0..9, e.g. 20180518
-            - minus sign
[0-9]{9}     - 9 digits 0..9, e.g. 152147535
$            - anchor - end of string