2011-04-20 56 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