2013-04-03 4 views
3

Я пытаюсь нормализовать строку перед тем, как продолжить и проанализировать ее. В основном удалите любые пробелы перед запятой или после нее, и если две или более запятых разделены пробелом, замените их на одну запятую.RegEx Заменить строку

var r = new Regex(@"(\s*,+\s*)"); 
var query = r.Replace("my reg, is a disaster everytime , i,try ,it,  yep, ,disaster.", ","); 

Вывод должен быть:

my reg,is a disaster everytime,i,try,it,yep,disaster. 

но его:

my reg,is a disaster everytime,i,try,it,yep,,disaster. 

Любая помощь приветствуется

ответ

5

Попытка

var r = new Regex(@"(\s|,)*,(\s|,)*"); 

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

0

В исходной строке есть пробел между двумя запятыми (","), но в регулярном выражении указано ,+, что означает одну или несколько последовательных запятых. Эта работа: (\s*(,\s+)+\s*)?

2

non-Regex решение:

var dirty = "my reg, is a disaster everytime , i,try ,it,  yep, ,disaster."; 
var clean = string.Join(",", 
          dirty.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries) 
           .Select(x => x.Trim()) 
           .Where(x => x.Length > 0)); 

Выход:

my reg,is a disaster everytime,i,try,it,yep,disaster. 

Как это работает? Разделить исходную строку на "," символ, выбросить пустые строки, обрезать все пробелы от начала/конца каждой строки, присоединить непустые строки, используя то же самое ",".

IMO, более прочная в использовании, чем RegEx

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