2011-12-05 213 views
0

我想用這個名字搜索所有文件:Resources.Designer.pas,Settings.Designer.pas。C#不正確的正則表達式

我的代碼行是:

if (myString.Equals("*.Designer.pas")) 

,但它並沒有在if塊進入。爲什麼?

+1

這不是一個正則表達式。 'String.Equals'正在檢查確切的值。如果您想使用正則表達式和'*'通配符,請檢查['IsMatch'](http://msdn.microsoft.com/zh-cn/library/3y21t6y4.aspx)方法。 – Otiel

回答

3
if (myString.EndsWith(".Designer.pas")) 
0

因爲您引用了文字字符串「* .Designer.pas」。這可能不存在。我建議你嘗試搜索「.Designer.pas」這樣你就會得到你正在尋找的結果。

2

在正則表達式中,.是一個特殊字符,意思是'匹配任何字符'。如果你想明確地匹配一段時間,你將不得不逃脫它。這應該工作:

string pattern = @".*\.Designer\.pas"; 
if (Regex.IsMatch(myString, pattern)) 

欲瞭解更多信息,請看看this MSDN文章。然而,以上將匹配foo.Designer.pas.bar的任何形式,其中foobar表示任何字符串。如果你想明確地匹配.Designer.pas結尾的文件,你應該使用這樣的事情:

string pattern = @".*\.Designer\.pas$"; 
if (Regex.IsMatch(myString, pattern)) 

$將指示正則表達式引擎匹配的字符串,並確保它是字符串的最後一部分。

+0

我收到編譯器錯誤無法識別的序列。 –

+0

我已經對答案進行了修改。 – npinti

2

我想你也可以使用:

if (myString.EndsWith(".Designer.pas", 
         StringComparison.InvariantCultureIgnoreCase)) 
0

如果您正在尋找在符合特定模式的文件系統的文件列表,你可以使用Directory.GetFiles

foreach(string f in Directory.GetFiles("C:\\YourPath", "*.Designer.pas")) 
{ 
    ... 
} 

您也可以使用.而不是C:\\YourPath來使用當前目錄。

1

你需要

Regex.IsMatch(str, "\.Designer\.pas$") 

,以確保一個給定的字符串 「.Designer.pas」 結束。