2011-04-20 169 views
1

我需要找到一个以“prft”开头的文件。这个文件的名称“prft0000.140”,“prft2100.140”,“prft1258.140”。 ..等我需要验证这个文件是否存在一个特定的目录。所以我有这个正则表达式来找到它们,但我不知道如何编写过滤器来匹配。用正则表达式筛选搜索文件

List<string> prftFiles = (new DirectoryInfo(filePath)) 
         .GetFiles(".", SearchOption.AllDirectories) 
         .Where(a => Regex.IsMatch(a.Name, "prft[^*]$")) 
         .Select(fi => fi.Name) 
         .ToList(); 

这不行“prft [^ *] $”,那么,怎么样?

+1

为什么在DirectoryInfo.GetFiles()已经有一个可以'开始'的通配符搜索模式时使用RegEx? http://msdn.microsoft.com/en-us/library/8he88b63.aspx – 2011-04-20 19:42:02

回答

2

为什么不只是做List prftFiles = (new DirectoryInfo(filePath)).GetFiles("prft*", SearchOption.AllDirectories)

0

你其实并不需要在这里使用正则表达式,为目录类在您选择的模式的搜索机制。

Directory.GetFiles("C:\SomeDirectory", "prft*"); 

这个* widlcard匹配任何东西。

1

这是正则表达式,你可以使用

string pattern = @"^(prft\d{4}\.\d{3})$"; 

,但你可以通过通配符和查找文件*像其他人说 如果你想要的是数学的行话PRFT 4个位数。 3位数字,你应该使用正则表达式 ,因为prft *将找到任何名称以prft开头的文件

+0

+1显然是正确的答案。 – sln 2011-04-20 20:15:38