在C#中使用带有正则表达式的Directory.GetFiles?

gra*_*ady 30 c# regex file

我有这个代码:

string[] files = Directory.GetFiles(path, "......", SearchOption.AllDirectories)
Run Code Online (Sandbox Code Playgroud)

我想要的是返回只不与开头的文件p_,并t_与具有扩展名PNG或JPG或GIF.我该怎么做?

Abd*_*nim 68

Directory.GetFilesRegEx默认情况下不支持,您可以RegEx在文件列表中过滤.看看这个清单:

Regex reg = new Regex(@"^^(?!p_|t_).*");

var files = Directory.GetFiles(yourPath, "*.png; *.jpg; *.gif")
                     .Where(path => reg.IsMatch(path))
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

  • 有趣的答案,但我找不到关于`;`语法的任何官方文档.你在哪里遇到过那个? (10认同)
  • 只需注意:Directory.GetFiles()返回一个包含路径和文件名的字符串数组,因此您必须在Regex中考虑该字符串. (2认同)

Ian*_*Ian 10

你不能将Regex粘贴到参数中,它只是一个简单的字符串过滤器.尝试使用LINQ来过滤掉.

var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".jpg") || s.EndsWith(".png"))
            .Where(s => s.StartsWith("p_") == false && s.StartsWith("t_") == false)
Run Code Online (Sandbox Code Playgroud)