2013-06-10 11 views
6

Verwendung von C# und Regex ich eine seltsame Situation:Regex Match bekommt zu viele Ergebnisse

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

In meiner Welt der oben würde mir ein Ergebnis in ‚Sammlung‘, die 6 Ergebnisse enthalten. Meine Sammlung enthält stringent genug 12 Ergebnisse und jedes zweite Ergebnis ist {} (leer).

Ich habe versucht, es zu umschreiben:

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

Aber es gibt mir genau das gleiche Ergebnis. Was fehlt mir hier?

I Net Framework bin mit 4.5, C#

Antwort

7

glaube ich das Problem Ihr * quantifier ist. Es entspricht null oder mehr Zeichen, was bedeutet, dass eine leere Zeichenfolge technisch eine Übereinstimmung ist. Sie müssen die + quantifier verwenden, wie folgt aus:

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

Es wird sichergestellt, dass nur Strings mit einer oder mehreren Ziffern zurückgegeben werden.

Hinweis, ich habe auch die Zeichenklasse() um Ihre \d fallen gelassen, da es hier völlig unnötig ist.

Weiterführende Literatur:

+0

meinen Tag gerettet! Danke p.s.w.g .:-) – olf

1

Es besteht keine Notwendigkeit für regex:

string[] results = substr.Split(',');