この名前のすべてのファイルを検索したい:Resources.Designer.pas、Settings.Designer.pas。C#の間違った正規表現
if (myString.Equals("*.Designer.pas"))
それがあればブロックに入りません。
コードの私の行があります。どうして?
この名前のすべてのファイルを検索したい:Resources.Designer.pas、Settings.Designer.pas。C#の間違った正規表現
if (myString.Equals("*.Designer.pas"))
それがあればブロックに入りません。
コードの私の行があります。どうして?
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
の代わりに.
を使用して、現在のディレクトリを使用することもできます。
あなたは与えられた文字列が ".Designer.pas" で終わることを確認するために
Regex.IsMatch(str, "\.Designer\.pas$")
を必要としています。
これは正規表現ではありません。 'String.Equals'は正確な値をチェックしています。 regexと '*'ワイルドカードを使いたい場合は、['IsMatch'](http://msdn.microsoft.com/en-us/library/3y21t6y4.aspx)メソッドをチェックしてください。 – Otiel