此代码用于根据我的上一个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();
答案 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));
}