.net linq 与正则表达式 ismatch 在哪里

Kar*_*l_H 3 c# regex linq

在下面的 C# 方法中,我知道 Directory.GetFileNsmes() 确实返回文件列表。而且,我可以添加有效的“Where contains(contact)”。然而,我一生都无法确定为什么 searchPatter.IsMatch() 无法找到文件。我已经在http://regexpal.com/中测试了该模式,它按预期运行。namePattern 是“^\d{3}(.*).pdf”并且应该有一个匹配。

 public static List<string> GetFileNames(string pathName, string namePattern, string contact)
 {
   var searchPattern = new Regex(namePattern, RegexOptions.IgnoreCase);
   var files = Directory.GetFiles(pathName).Where(f => searchPattern.IsMatch(f));
       //.Where(f => f.Contains(contact));
   return files.ToList();
 }
Run Code Online (Sandbox Code Playgroud)

如果这个问题已经在某处得到回答,请告诉我,但我无法找到它。我认为这非常简单直接。

Sri*_*vel 5

Directory.GetFiles将返回填充文件路径,该路径将为Drive\Directory\File.ext. 这就是为什么你的模式似乎不匹配。你需要FileName单独作为主体。尝试这个

var files = Directory.GetFiles(pathName)
                 .Where(f => searchPattern.IsMatch(Path.GetFileName(f)));
Run Code Online (Sandbox Code Playgroud)