Basic Ответ
Если это то, что вы хотите, чтобы соответствовать:
- Несколько непрерывных пустых строк, где множество средств> 1.
- Все пустые строки в конце файла, за исключением одного неявно сгенерированный
\n
- перевод файла (что можно считать хорошей практикой, см. here).
- Все избыточные пробелы после окончания
\n
.
Тогда эта модель может помочь вам:
(^\s*(\r|\n)){2,}|^\s+(\r|\n)?\Z
Далее Разъяснение
Первая часть (^\s*(\r|\n)){2,}
заботится 1., вторую часть ^\s+(\r|\n)?\Z
матчи лишними пустые строки в конце файла или избыточные пробелы после завершения \n
.
Если ваш файл выглядит следующим образом (с окончаниями Unix файлов) ...
1. FirstLine\n
2.
3. ThirdLine\n
4. FourthLine\n
5.
6.
7. SeventhLine\n
... то он соответствует только линии 5 и 6, но ничего в конце. Notepad ++, хотя будет показывать 8-ю строку в конце из-за завершающего \n
. Однако, если в конце файла будет несколько \n
s или если будет добавлено \t
или пробелы после окончания \n
в 7-й строке, они совпадут.
Если вы хотите, чтобы соответствовать линиям, порожденных прекращением \n
(и в результате удаления прекращения \n
при замене), вы можете также использовать ^\s*\Z
вместо второй части регулярного выражения.
Дополнительное объяснение \s*(\r\n)
: Это соответствует каждой разрешенной комбинации, как abc\n
, abc\r\n
или abc\r
потому что \s
также включает в себя \n
и \r
.
\Z
соответствует концу всего файла/ввода (тогда как $
соответствует только концу строки).
Я уверен, что может быть более короткая версия регулярного выражения, но мое первое намерение состояло в том, чтобы заставить его работать и понимать.
Ваше регулярное выражение говорит, что совпадение как минимум '\ s' (если оно есть) вместе с любым из' \ n', '\ r' или' \ r \ n' не менее двух раз – rock321987
Я думаю, что если вы используете стиль resharper есть автоматическое исправление для этого конкретного нарушения, так что вы можете исправить все свое решение, не загружая собственное регулярное выражение. (может быть, проще написать крошечное консольное приложение, чтобы это все равно). – briantyler