2015-01-28 5 views
0

Этот код используется для генерации нового идентификатора на основе моего последнего идентификатора. Раньше Когда я генерировал идентификатор для D0001, 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(); 

ответ

1

В какой строке происходит ошибка?

мое предположение было бы, что ошибка происходит на линии

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

, потому что ваш Regex не нашел ни одного матча. Меняю бы это

var prefix = Regex.Match(autoID, "^[A-Za-z]+").Value; 
    var number = Regex.Replace(autoID, "^[A-Za-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)); 
    } 
2
^C\\d+ 

Вы должны попробовать это. Если вы хотите соответствовать C, вам не нужно его избегать. \\C может стать специальной директивой, как \\d или \\D.

Смежные вопросы