2

私はこのような文字列を持っています

string myString = "Master Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\"";
  1. Master と Language="C#" という正確な単語が含まれていることを確認する必要があります。
  2. Master と Language という単語がこのように配置されるとは限りません。したがって、Contains("Master Language") のようなものは機能しません

私はregex.IsMatchしばらく何の結果もなく遊んでいたので、誰かが私を助けることができれば、私はそれを感謝します!

4

6 に答える 6

3

単語の出現を任意の順序で見つける必要があるため、次のパターンを使用できます。

string pattern = @"^(?=.*\bMaster\b)(?=.*Language=""C#"").+$";

これは、肯定的なルックアラウンドを使用して と の存在をチェックしMasterますLanguage="C#"。単語境界のメタ文字 を使用していることに注意してください\b。これにより、「Master」が完全に一致することが保証されます。これにより、「MasterPage」で部分一致が発生しないことが保証されます。

例:

string[] inputs = 
{
    "Master Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\"", // true
    "Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\" Master", // true
    "Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\"" // false
};

string pattern = @"^(?=.*\bMaster\b)(?=.*Language=""C#"").+$";

foreach (var input in inputs)
{
    Console.WriteLine(Regex.IsMatch(input, pattern));
}
于 2012-05-01T16:51:10.850 に答える
0
string strTestMe = Regex.Replace(myString, ".*(Master Language=\"C#\").*", "$2")
If strTestMe <> ""
  DO STUFF
End If
于 2012-05-01T16:32:32.877 に答える
0

これはあなたが求めている答えではないかもしれませんが、正直なところ、ここで正規表現を使用するのはやり過ぎのようです。string.Containsを使用するだけで、全体的なパフォーマンスが向上する場合があります。

于 2012-05-01T16:32:48.413 に答える
0

string クラスの Contains() メソッドを使用できます。

于 2012-05-01T16:30:16.820 に答える
0

IndexOf メソッドLINKを使用して、パターンが文字列に存在するかどうかを確認できます。

bool found = myString.IndexOf("Master Language=\"C#\"") != -1;
于 2012-05-01T16:30:59.737 に答える
-2

これは私がしたことです

bool containMaster = Regex.IsMatch(myString, @"\bMaster\b");
bool containLanguage = Regex.IsMatch(myString, "Language=\"C#\"");

シンプルで効果的

于 2012-05-01T16:56:58.647 に答える