2012-03-02 2 views
0

Привет, как вы извлекаете несколько десятичных знаков с различным количеством десятичных знаков из строки? Я ищу, чтобы найти общий способ извлечь 3 номера из следующих строк.Общее извлечение нескольких десятичных знаков с использованием регулярных выражений

например

CC77X1722X12 => 77,1722,12 
PC77.5X10102X12.5 => 77.5, 10102, 12.5 
XP60.25X0.333X12 => 60.25, 0.333, 12 

три числа всегда разделяются 'X', и строка всегда начинается с 2-х символов

Спасибо!

+0

Я должен решить этот вопрос по простому факту, что автор даже не поставил образец кода (т. Е. Покажите нам, что он пытался). –

ответ

4

Поскольку у вас есть такой конкретный шаблон, вам даже не нужно использовать регулярные выражения. Поскольку первые два символа могут быть проигнорированы и все числа разделяются символами «X», это C# код должен делать трюк (с соответствующей обработкой ошибок добавляется, конечно)

public IEnumerable<decimal> ExtractNumbers(string s) 
{             // For s = "CC77X1722X12" 
    string[] nums = s.Substring(2).Split('X');  // nums = ["77", "1722", "12"]; 
    return nums.Select(num => decimal.Parse(num)); // returns [77, 1722, 12] 
} 

Для производства кода, хотя, Я бы порекомендовал decimal.TryParse над decimal.Parse. Чтобы использовать этот метод, вы могли бы написать что-то вроде

public IEnumerable<decimal> ExtractNumbers(string s) 
{ 
    string[] nums = s.Substring(2).Split('X'); 
    return nums 
     .Select(num => { 
       decimal d; 
       if (decimal.Parse(num, out d)) 
        return new {Number = d, Succeeded = true}; 
       return new {Number = 0, Succeeded = false}; 
      }) 
     .Filter(result => result.Succeeded) 
     .Select(result => result.Number); 
} 
+0

Отлично! большое спасибо – JustinHui

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