2017-01-26 3 views
3

Ich möchte reguläre Ausdrücke verwenden, um Ziffernfolgen aus einer Zeichenfolge zu extrahieren, die einen gemischten Alphasatz darstellt.Extrahiere nur Zahlen aus einer gemischten alphanumerischen Zeichenfolge

Beispiele:

"Please buy 40 kg of apples for 1350$ each"     --> "40|1350" 
"Please call 8 0 0 4 3 2 1 2 4 3 from 17:00 till 22:00"  --> "8004321243|1700|2200" 
"I would like to bid 50 euro on 20 black and pair of spades" --> "50|20" 

So nur Ziffern Extrakte, und jedes Wort, sind in zwischen zu | Separator abgeschnitten. Wenn die Ziffern durch ein Nicht-Wort-Zeichen getrennt sind, werden sie als die gleiche Nummer wie im zweiten Beispiel betrachtet.

Antwort

1

Sie konnte zunächst versuchen, für die Ziffern von Ziffern und Nicht-Wort-Zeichen und sterilisieren Sie die regex gefolgt suchen späterer:

var str = "Please call 8 0 0 4 3 2 1 2 4 3 from 17:00 till 22:00"; 

var regex1 = new Regex(@"([\d]+[\d\W]*)"); 
var regex2 = new Regex(@"([\W]+)");  

foreach (var match in regex1.Matches(str).Cast<Match>()) 
{ 
    var val = match.Groups[1].Value;  

    foreach (var nonWordMatch in regex2.Matches(val).Cast<Match>()) 
    { 
     val = val.Replace(nonWordMatch.Value, ""); 
    } 

    var number = Int64.Parse(val); 
    Console.WriteLine(">> num " + number); 
} 
+1

Funktioniert! Vielen Dank. – user1395570

0
StringBuilder number = new StringBuilder(); 
List<string> test = new List<string>(); 

foreach (char c in s) 
    { 
     if (Char.IsDigit(c)) { 
      number.append(c); 
     } 
     else if (c == ' ' || c == ':') { 
      //donnothing 
     } 
     else { 
      if (number.Length > 0) { 
      test.add(number.ToString()); 
      number.Clear(); 
      } 
     } 
    } 
0

Entfernen Sie alle Nicht-Wort-Zeichen mit Regex.Replace(s, @"\W+", ""), und dann alle einstelligen Brocken extrahieren mit dem einfachen \d+ Muster:

var res = Regex.Matches(Regex.Replace(s, @"\W+", ""), @"\d+") 
     .Cast<Match>() 
     .Select(m=>m.Value) 
     .ToList(); 

die C# demo See.

Verwandte Themen