2011-12-05 10 views
0

この名前のすべてのファイルを検索したい:Resources.Designer.pas、Settings.Designer.pas。C#の間違った正規表現

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

それがあればブロックに入りません。

コードの私の行があります。どうして?

+1

これは正規表現ではありません。 'String.Equals'は正確な値をチェックしています。 regexと '*'ワイルドカードを使いたい場合は、['IsMatch'](http://msdn.microsoft.com/en-us/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

あなたは与えられた文字列が ".Designer.pas" で終わることを確認するために

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

を必要としています。