C# 验证字符串是否包含某些确切的单词

C# 验证字符串是否包含某些确切的单词,c#,regex,C#,Regex,我有一根像这样的绳子 string myString = "Master Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\""; 我需要验证它是否包含确切的单词Master和Language=“C#” 我不能总是保证单词Master和Language会这样放置,因此像Contains(“Master Language”)这样的东西是不行的 我一直在玩regex.IsMatch有一段时间没有任何结果,所以如果有人能帮

我有一根像这样的绳子

string myString = "Master Language=\"C#\" MasterPageFile=\"~/masterpages/Libraries.master\"";
  • 我需要验证它是否包含确切的单词Master和Language=“C#”
  • 我不能总是保证单词Master和Language会这样放置,因此像Contains(“Master Language”)这样的东西是不行的

  • 我一直在玩
    regex.IsMatch
    有一段时间没有任何结果,所以如果有人能帮助我,我将不胜感激

    您可以使用string类的Contains()方法。

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

    string strTestMe=Regex.Replace(myString,“.*(主语言=\“C\”.*”,“$2”)
    如果strTestMe“”
    做事
    如果结束
    
    我意识到这可能不是你想要的答案,但老实说,在这里使用正则表达式似乎有些过分。通过简单地使用string.Contains,您可能会获得更好的整体性能,因为您需要以任何顺序查找单词的出现情况,所以可以使用以下模式:

    string pattern = @"^(?=.*\bMaster\b)(?=.*Language=""C#"").+$";
    
    这将使用正向环视检查是否存在
    Master
    Language=“C#”
    。注意单词边界元字符的使用,
    \b
    ,它确保“Master”是精确匹配的。这样可以确保“母版页”中不会出现部分匹配

    例如:

    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));
    }
    
    这就是我所做的

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

    简单而有效

    为什么不
    IndexOf()>=0
    包含
    ?包含将同时获得主页面文件和主页面文件,所以不@Trikks只有在搜索“母版”时才是这样,但如果搜索示例中出现的
    Master Language=“C#”
    ,它将与“母版”不匹配。除非这两个单词可以出现在字符串中的任何位置,而不是如图所示,否则
    Contains
    就足够了。属性有时可能会改变@Trikks那么你需要在你的问题中包括这个。不,因为我在找Master,而MasterPageFile这个词也可能在字符串中。如果字符串中有一个不好,那么该方法将始终返回true。Contains将同时获取Master和MasterPageFile,所以nope nope!这样做的技巧,但我不能总是说,字符串总是这样构造的。属性有时可能会改变!这很有效,我将采用稍微不同的方法,但这是最接近的。感谢您理解使用Regex解决此类问题的价值!。。。而且比字符串方法更好,比如Contain any way of the week。
    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));
    }
    
    bool containMaster = Regex.IsMatch(myString, @"\bMaster\b");
    bool containLanguage = Regex.IsMatch(myString, "Language=\"C#\"");