2013-06-10 2 views
6

Использование C# и Regex У меня есть странная ситуация:Regex MatchCollection получает слишком много результатов

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
MatchCollection collection = Regex.Matches(substr, @"[\d]*"); 

В моем мире выше дал бы мне результат в «коллекции», который содержит 6 результатов. Как ни странно, моя коллекция содержит 12 результатов, и каждый второй результат {} (пустой).

Я попытался переписать его на:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
Regex regex = new Regex(@"[\d]*"); 
MatchCollection collection = regex.Matches(substr); 

Но это дает мне тот же результат. Что мне здесь не хватает?

Я использую рамки .Net 4.5, C#

ответ

7

Я считаю, что проблема ваша * квантор. Он соответствует нулю или нескольким символам, что означает, что пустая строка технически соответствует. Вы должны использовать + квантора, как это:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
MatchCollection collection = Regex.Matches(substr, @"\d+"); 

// or 
Regex regex = new Regex(@"\d+"); 
MatchCollection collection = regex.Matches(substr); 

Это будет гарантировать, что только строки с одной или более цифр возвращаются.

Примечание. Я также отбросил класс персонажа ([]) вокруг вашего \d, так как здесь совершенно необязательно.

Дополнительная литература:

+0

Сохраненный мой день! Спасибо p.s.w.g :-) – olf

1

Там нет необходимости в регулярных выражениях:

string[] results = substr.Split(','); 
Смежные вопросы