2017-01-26 4 views
3

Я хотел бы использовать регулярное выражение для извлечения ряда цифр из строки, представляющей смешанное альфа-предложение.Извлечь только цифры из смешанной буквенной строки

Примеры:

"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" 

Так только цифры экстракты, и любое слово между обрезаются до | сепаратора. Если цифры разделены символом, отличным от слова, они считаются тем же числом, что и во втором примере.

ответ

1

вы могли бы сначала попытаться найти цифр и цифр плюс nonword символов и дезинфицировать регулярное выражение соответствует впоследствии:

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

Работы! Благодарю. – 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

Удалить все nonword символы с Regex.Replace(s, @"\W+", ""), а затем извлечь все цифры ломти с простой \d+ схеме:

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

См C# demo.

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