我想用这个名字搜索所有文件:Resources.Designer.pas,Settings.Designer.pas。C#不正确的正则表达式
我的代码行是:
if (myString.Equals("*.Designer.pas"))
,但它并没有在if块进入。为什么?
我想用这个名字搜索所有文件:Resources.Designer.pas,Settings.Designer.pas。C#不正确的正则表达式
我的代码行是:
if (myString.Equals("*.Designer.pas"))
,但它并没有在if块进入。为什么?
if (myString.EndsWith(".Designer.pas"))
因为您引用了文字字符串“* .Designer.pas”。这可能不存在。我建议你尝试搜索“.Designer.pas”这样你就会得到你正在寻找的结果。
在正则表达式中,.
是一个特殊字符,意思是'匹配任何字符'。如果你想明确地匹配一段时间,你将不得不逃脱它。这应该工作:
string pattern = @".*\.Designer\.pas";
if (Regex.IsMatch(myString, pattern))
欲了解更多信息,请看看this MSDN文章。然而,以上将匹配foo.Designer.pas.bar
的任何形式,其中foo
和bar
表示任何字符串。如果你想明确地匹配.Designer.pas
结尾的文件,你应该使用这样的事情:
string pattern = @".*\.Designer\.pas$";
if (Regex.IsMatch(myString, pattern))
的$
将指示正则表达式引擎匹配的字符串,并确保它是字符串的最后一部分。
我收到编译器错误无法识别的序列。 –
我已经对答案进行了修改。 – npinti
我想你也可以使用:
if (myString.EndsWith(".Designer.pas",
StringComparison.InvariantCultureIgnoreCase))
如果您正在寻找在符合特定模式的文件系统的文件列表,你可以使用Directory.GetFiles
:
foreach(string f in Directory.GetFiles("C:\\YourPath", "*.Designer.pas"))
{
...
}
您也可以使用.
而不是C:\\YourPath
来使用当前目录。
你需要
Regex.IsMatch(str, "\.Designer\.pas$")
,以确保一个给定的字符串 “.Designer.pas” 结束。
这不是一个正则表达式。 'String.Equals'正在检查确切的值。如果您想使用正则表达式和'*'通配符,请检查['IsMatch'](http://msdn.microsoft.com/zh-cn/library/3y21t6y4.aspx)方法。 – Otiel