如何在C#中使用正则表达式查找文件

10

我需要获取某个驱动器上路径匹配特定模式的文件列表,例如FA\d\d\d\d.xml其中\d是数字(0,1,2..9)。因此,文件可以具有像FA5423.xml这样的名称。

最有效的方法是什么?


1
这个回答解决了你的问题吗?C# - 正则表达式 - 根据特定命名模式匹配文件名 - Jim G.
3个回答

22

你正在使用C# 3吗?

Regex reg = new Regex(@"^FA[0-9]{4}\.xml$");
var files = Directory.GetFiles(yourPath, "*.xml").Where(path => reg.IsMatch(path));

".Select(path => path)" 是多余的。 - Marcelo Cantos
好的...现在我再看一遍,我应该锚定正则表达式,而且获取*.*也没有意义。 - Phil Gan
@Phil 最好使用 EnumerateFiles,就像这个链接中所说的 http://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder,因为性能方面你会看到这里的差异 https://dev59.com/gG035IYBdhLWcg3wBLRL。 - QMaster

6
您可以这样做:
System.IO.Directory.GetFiles(@"C:\", "FA????.xml", SearchOption.AllDirectories);

然后从您的结果中遍历它们,并根据您的正则表达式验证它们,即验证名称中的?字符是否都是数字。


2
使用Directory API查找FA????.xml,并将结果列表通过正则表达式过滤:
var fa = from f in Directory.GetFiles("FA????.xml")
         where Regex.Match(f, "FA\d\d\d\d\.xml")
         select f;

5
Regex.Match不会返回一个布尔值,而是返回一个匹配对象(Match object)。 - Phil Gan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接