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

您可以使用字符串类的 Contains() 方法。

于 2012-05-01T16:30:16.820 回答
0

您可以使用 IndexOf 方法LINK找出字符串中是否存在模式。

bool found = myString.IndexOf("Master Language=\"C#\"") != -1;
于 2012-05-01T16:30:59.737 回答
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 回答
-2

这就是我所做的

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

简单有效

于 2012-05-01T16:56:58.647 回答