在C#中将String与Regex进行比较

时间:2014-11-08 13:12:38

标签: c# regex

我有一个从文件中获取的字符串列表。这些字符串中的一些格式为" Q" +数字+" null" (例如Q98null,Q1null,Q24null等)

使用foreach循环,我必须检查字符串是否与之前显示的字符串相同。 我现在就用这个​​

string a = "Q9null" //just for testing
if(a.Contains("Q") && a.Contains("null"))
  MessageBox.Show("ok");

但是我想知道是否有更好的方法来使用正则表达式。 谢谢!

3 个答案:

答案 0 :(得分:3)

您的方法会产生大量误报 - 例如,它会识别一些无效的字符串,例如"nullQ""Questionable nullability"

测试匹配的正则表达式为"^Q\\d+null$"。结构非常简单:它表示目标字符串必须以Q开头,然后应该有一个或多个十进制数字,然后最后应该有null

Console.WriteLine(Regex.IsMatch("Q123null", "^Q\\d+null$")); // Prints True
Console.WriteLine(Regex.IsMatch("nullQ", "^Q\\d+null$"));    // Prints False

Demo.

答案 1 :(得分:0)

public static bool Check(string s)
{
    Regex regex = new Regex(@"^Q\d+null$");
    Match match = regex.Match(s);
    return match.Success;
}

在您的代码中应用上述方法:

string a = "Q9null" //just for testing
if(Check(a))
  MessageBox.Show("ok");

答案 2 :(得分:0)

第一种方式:使用正则表达式

使用此正则表达式^Q\d+null$

第二种方式:使用SubString

string s = "Q1123null";
string First,Second,Third;
First = s[0].ToString();
Second = s.Substring(1,s.Length-5);
Third = s.Substring(s.Length-4);
Console.WriteLine (First);
Console.WriteLine (Second);
Console.WriteLine (Third);

然后你可以检查一切......