使用正则表达式时出错

时间:2015-01-28 11:47:08

标签: c# asp.net regex

此代码用于根据我的上一个ID生成新ID。以前当我为D0001生成ID时,D0002(" ^ \ D +")等....没有问题 但是现在对于C0001,C0002关于我的表达式有一个错误(" ^ \ C +").... 对不起我的英语不好 。

string autoquery = "select top(1) CommentID from [Comment] order by CommentID DESC";
        SqlCommand cmd1 = new SqlCommand(autoquery, cn);
        cn.Open();
        SqlDataReader dr = cmd1.ExecuteReader();
        dr.Read();
        string autoID = dr["CommentID"].ToString();
        var prefix = Regex.Match(autoID, "^\\C+").Value;
        var number = Regex.Replace(autoID, "^\\C+", "");
        var i = int.Parse(number) + 1;
        var newString = prefix + i.ToString(new string('0', number.Length));

        cn.Close();

2 个答案:

答案 0 :(得分:2)

^C\\d+

你应该试试这个。当你想匹配C时,你无需逃避它。 \\C可以成为\\d\\D等特殊指令。

答案 1 :(得分:1)

错误发生在哪一行?

我的猜测是错误发生在

行上
    var prefix = Regex.Match(autoID, "^\\C+").Value;
    var number = Regex.Replace(autoID, "^\\C+", "");

因为您的正则表达式找不到匹配项。我会把它改成

    var prefix = Regex.Match(autoID, "^[A-Za-z]+").Value;
    var number = Regex.Replace(autoID, "^[A-Za-z]+", "");

在任何情况下匹配所有字母a-z而不仅仅是字母C或D

另一种方式,如果防御性地编码你的正则表达式没有找到任何匹配

    var prefix = Regex.Match(autoID, "^\\C+")
    if (prefix.Success)
    {
         var number = Regex.Replace(autoID, "^\\C+", "");
         var i = int.Parse(number) + 1;
         var newString = prefix + i.ToString(new string('0', number.Length));
    }