2011-12-05 159 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” 结束。