2016-12-13 2 views
0

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

У меня есть входной строки данных:

var xRaw= ",String30.0,String1.0,String0.0,String-1.0,StringOFF".Split(',').ToList(); 

Как выйти из формата пут: "30,1,0,-1,OFF"

var ValuesString = xRaw.Select(x => Regex.Replace(x, "[^OF0-9-,\\.]", "")).ToList() 
    .Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); 

Выше регулярное выражение будет удалить строку и сохранить требуемую строку «OFF», но его держит другой, рядом с "." точка.

+1

Есть ли требование использовать регулярное выражение? Вы можете связать некоторые вызовы 'string.Replace' для того же эффекта. – ScoobyDrew18

+0

mate его невозможно, потому что мы не знаем «строковые» данные, которые будут следующим числовым значением. –

+1

Если 'String' состоит из неизвестных символов, довольно сложно помочь, не зная точных спецификаций. Откуда вы знаете, где этот 'OFF' должен быть сохранен и почему? –

ответ

1

Вы можете исправить шаблон (если он работает достаточно хорошо для вас), просто добавляя \.[0-9]+ альтернативу также удалить дробные части чисел с плавающей точкой.

@"[^OF0-9-,.]|\.[0-9]+". 

Лучшим вариантом является сохранение OFF как последовательности из символов, не просто O или F:

Regex.Replace(x, @"(OFF)|[^0-9-,.]|\.[0-9]+", "$1") 

Здесь OFF захватывается в 1-й группе и $1 обратной ссылки восстанавливает его в результирующая строка.

0

Умм ... Я думаю, что это соответствует вашей строке ввода. Не зная, какие изменения могут произойти, нет никакого способа узнать, работает ли он на всех данных, которые вы можете получить.

var xRaw= ",String30.0,String1.0,String0.0,String1.0,StringOFF"; 
string result = String.Join(",", 
        Regex.Matches(xRaw, "\\d+.?\\d*|OFF") 
         .Cast<Match>() 
         .Select(m => { 
             decimal d; 
             if(decimal.TryParse(m.Value, out d)) 
              return ((int)d).ToString(); 
             return m.Value; 
            })); 
0

Вот простое решение:

var input = ",String30.0,String1.0,String0.0,String-1.0,StringOFF"; 
var output = Regex.Replace(Regex.Replace(input, @"[^OF\-\d.,]", ""), @"\.\d", "").TrimStart(','); 

Рабочий пример: https://dotnetfiddle.net/8IordG

0
string giventxt = "text text 54654654200500.0000 text text"; 
string[] arry = giventxt.Split('.'); 
string arry1 = arry[1]; 
string[] arry2 = arry1.Split(' '); 
string completestr = arry[0] + " " + arry2[1] + " " + arry2[2]; 
+4

Просьба представить комментарий вместе с вашим ответом, только ответы на код считаются некачественными. – GPhilo

+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – Isma

+0

Шаг1: Разделите данный текст на "." char, Step2: Assign arry [1] (текст 0000 текста) для строковой переменной arry1, Step3: Split arry [1] с символом "", Step4: Concat arry [0] + "" + arry2 [1] + "" + arry2 [2], чтобы сформировать требуемый текст. –

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