Простое многошаговое решение выглядит следующим образом:
Все пробельные символы, за исключением символов новой строки, должны быть преобразованы в пробел (т.е. будут преобразованы \ f, \ r, \ t, \ vна пробел)
output = Regex.Replace(input, "[\\f\\r\\t\\v ]+", " ");
Пробел входит в указанную выше группу.
Если пробел предшествует или следует за новой строкой, пробел должен быть удален.
output = Regex.Replace(output, " \n", "\n");
output = Regex.Replace(output, "\n ", "\n");
Вместо этих двух можно вместо этого использовать String.Replace
в стиле:
output = output.Replace(" \n", "\n");
output = output.Replace("\n ", "\n");
или даже:
output = output.Replace(" \n", "\n").Replace("\n ", "\n");
Строка не может иметь два или более последовательных пробела, кроме новых строк.Символы новой строки ограничены максимум двумя последовательными вхождениями (т. Е. \ N в порядке, \ n \ n тоже в порядке, но \ n \ n \ n недопустимо и должно быть заменено на \ n \ n).
output = Regex.Replace(output, "\n\n\n+", "\n\n");
В сторону.Если система использует \r\n
для последовательностей новой строки, то подавление символов \r
может привести к нежелательным результатам.