2014-03-28 34 views
0

我對使用正則表達式相當陌生,而且我還沒有完全清楚所有的語法。基本上我卡在一些代碼,我有:如何將正則表達式與字符串結合使用?

if(@"\d{2,}\s"+string == Path.GetFileNameWithoutExtension(dir)) 
{ 
    do stuff 
} 

我的問題是,它不會匹配任何東西。我基本上有一堆搜索文件,它們都有2個數字和一個空格,然後是用戶正在搜索的名稱。我可以結合這樣的正則表達式+字符串還是與我的正則表達式/語句的問題?爲了清楚起見,當我實際上從文件中刪除兩位數字和空格時,它會匹配。我很抱歉,如果問題是顯而易見的,我只玩了幾天的正則表達式...

+0

這絕對不是正確的C#語法。 – MarcinJuraszek

+0

字符串==與正則表達式無關。它只會做文字比較。您需要使用Regex.IsMatch或Regex.Matches來比較字符串和正則表達式,而不是== –

+1

否。如果*在語法上是有效的(不是這樣),那麼它不會評估正則表達式。它會簡單地將'\ d {2,} \ s'和'string'的內容連接成一個字符串 - 你稱之爲「正則表達式」將只是一個字符串。爲什麼不解釋你正在努力完成的任務,並要求如何這樣做,而不是試圖將正則表達式轉化爲事物(這並不總是合適的)。 –

回答

3

您的if語句不是試圖匹配正則表達式模式,它只是比較兩個字符串。這就是Regex.IsMatch方法的用途。你也可能想用Regex.Escape來組合正則表達式模式和任意字符串。

試試這個:

using System.Text.RegularExpressions; 

... 

var pattern = @"\d{2,}\s" + Regex.Escape(myString); 
var fileName = Path.GetFileNameWithoutExtension(dir); 
if (Regex.IsMatch(fileName, pattern)) 
{ 
    // do stuff 
} 
+0

謝謝,這工作完美。 – CrzyGK

0

事實上,你不應該在該實例使用正則表達式,實際上可能是在目標複雜化。

string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string [] file = Directory.GetFiles(path, @"11_*.txt", SearchOption.AllDirectories); 
foreach(string f in file) 
{ 
    // Do Something. 
} 

如果您在使用正則表達式完全耳機,你會做一些沿着這些線路更多:

using System.Text.RegularExpressions; 

... 

    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
    var file = Regex.IsMatch(path, @"\d{2,}\2"); 
    if(file == true) 
    { 
     // Do Something 
    } 

那就是用正則表達式的一種方式,他們可以更加強大與Linq。我強烈建議在MSDN上進行研究,它有一些可靠的資源。

相關問題