2013-06-10 9 views
6

przy użyciu C# i Regex Mam dziwną sytuację:Regex MatchCollection dostaje zbyt wiele wyników

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

w moim świecie z powyższym dałby mi wynik w „zbieranie”, który zawiera 6 wyników. Co dziwne, moja kolekcja zawiera 12 wyników, a co drugi wynik to {} (pusty).

Próbowałem przepisanie go na adres:

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

Ale to daje mi dokładnie ten sam wynik. Czego tu mi brakuje?

Używam .NET Framework 4.5, C#

Odpowiedz

7

Wierzę, że problem jest Twój * kwantyfikator. Dopasowuje zero lub więcej znaków, co oznacza, że ​​pusty ciąg jest technicznie zgodny. Trzeba użyć + kwantyfikator, tak:

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); 

Zapewni to, że tylko smyczki z jednym lub więcej cyfr są zwracane.

Uwaga: Opuściłem także klasę znaków ([]) wokół Twojego \d, ponieważ jest to zupełnie niepotrzebne.

Dalsze Reading:

+0

Zapisane mój dzień! Dziękujemy p.s.w.g :-) – olf

1

Nie ma potrzeby regex:

string[] results = substr.Split(','); 
Powiązane problemy