Регулярное удаление двойной / тройной запятой в строке - PullRequest
8 голосов
/ 13 января 2010

Мне нужно проанализировать строку, чтобы результат выглядел так:

"abc,def,ghi,klm,nop"

Но полученная мной строка может выглядеть примерно так:

",,,abc,,def,ghi,,,,,,,,,klm,,,nop"

Дело в том, что я не знаю заранее, сколько запятых разделяет слова.
Есть ли в C # регулярное выражение, которое может помочь мне решить эту проблему?

Ответы [ 5 ]

11 голосов
/ 13 января 2010

Вы можете использовать выражение ,{2,} для сопоставления любых вхождений с двумя или более запятыми, а затем заменить их одной запятой.

Вам, вероятно, также понадобится вызов Trim, чтобы удалить оставшиеся начальные или конечные запятые, оставшиеся от вызова Regex.Replace. (Возможно, что есть какой-то способ сделать это с помощью замены регулярных выражений, но ничего не приходит на ум сразу.)

string goodString = Regex.Replace(badString, ",{2,}", ",").Trim(',');
6 голосов
/ 13 января 2010

Найдите ,,+ и замените все на ,.

Так что в C # это может выглядеть как

resultString = Regex.Replace(subjectString, ",,+", ",");

,,+ означает «соответствовать всем вхождениям двух или более запятых», поэтому одиночные запятые не будут касаться Это также можно записать как ,{2,}.

3 голосов
/ 13 января 2010

простое решение без регулярных выражений:

string items = inputString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(",", items);
2 голосов
/ 14 января 2010

На самом деле, вы можете сделать это без каких-либо вызовов Trim.

text = Regex.Replace(text, "^,+|,+$|(?<=,),+", "");

должен сделать трюк.

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

1 голос
/ 02 декабря 2014

Вот мое усилие:

//Below is the test string 
string test = "YK     002       10        23           30         5       TDP_XYZ  "
private static string return_with_comma(string line)
    {
        line = line.TrimEnd();
        line = line.Replace("  ", ",");
        line = Regex.Replace(line, ",,+", ",");
        string[] array;
        array = line.Split(',');
        for (int x = 0; x < array.Length; x++)
        {
            line += array[x].Trim();
        }
        line += "\r\n";
        return line;
    }
 string result = return_with_comma(test);
 //Output is
 //YK,002,10,23,30,5,TDP_XYZ  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...