2014-01-29 187 views
0

我需要從與此示例相同的目錄加載文件:「Client_Test_delete.xlsx」。但是用_delete.xlsx擴展名加載所有 文件。如何創建有效的testMask?包含特定單詞的正則表達式

var testMask = @"^[Client]+(.*_delete.xlsx*).*$"; 
var searchPattern = new Regex(testMask, RegexOptions.IgnoreCase); 
var files = Directory.GetFiles(fullPath).Where(f => searchPattern.IsMatch(f)); 

目錄中的文件:

c:\Client_Test_delete.xlsx" 
c:\Some_Test_delete.xlsx" 
+1

嘗試學習正則表達式。他們根本不復雜。一個重要的提示:你的隨機嘗試不會奏效。 – zerkms

回答

2
string txt="Client_Test_delete.xlsx"; 

    string re1="(Client)"; // Word 1 
    string re2=".*?"; // Non-greedy match on filler 
    string re3="_"; // Uninteresting: c 
    string re4=".*?"; // Non-greedy match on filler 
    string re5="(_)"; // Any Single Character 1 
    string re6="(delete)"; // Word 2 
    string re7="(\\.)"; // Any Single Character 2 
    string re8="(xlsx)"; // Variable Name 1 

    Regex r = new Regex(re1+re2+re3+re4+re5+re6+re7+re8,RegexOptions.IgnoreCase|RegexOptions.Singleline); 
    Match m = r.Match(txt); 
    if (m.Success) 
    { 
    //Delete file 
    } 
+0

已更新,因此它包括單詞'客戶' –

1

嘗試用這個表達式:

^(?:[\ W] \:)+ \ *(客戶端)。*?_。*?_ delete.xlsx

我用Client部分更新表達式。

它匹配: 「C:\ Client_Test_delete.xlsx」
和失敗, 「C:\ Some_Test_delete.xlsx」

+0

我需要第一個詞「客戶端「 – zrabzdn

+0

^(?:[\ w] \:)+ \ * *(Client)。*?_。*?_ delete.xlsx pattern not work – zrabzdn

1

你可以嘗試這樣的:

var testMask = @"^Client_[a-z\d]+_delete.xlsx?$"; // OR "^Client_[^_]+_delete.xlsx?$" 
var searchPattern = new Regex(testMask, RegexOptions.IgnoreCase); 
var files = Directory.GetFiles(fullPath).Where(f => searchPattern.IsMatch(f)); 

這將匹配文件.xlsx.xls分機,第一個單詞client和最後一個單詞delete

希望它會給你一個想法繼續前進。

相關問題