Подтвердить что ты не робот

Замена нескольких пустых строк одной пустой строкой с помощью поиска и замены RegEx

У меня есть файл, который мне нужно переформатировать и удалить лишние пустые строки.

Я использую поиск регулярных выражений синтаксиса Perl и заменяю функциональность UltraEdit и нуждаюсь в регулярном выражении для ввода в поле "Найти что:".

Вот пример файла, который мне нужно переформатировать.

All current text

REPLACE with all the following:


Winter 2011 Class Schedule 

Winter 2011 Class Registration Dates:  Dec. 6, 2010 – Jan. 1, 2011
Winter 2011 Class Session Dates:  Jan. 5 – Feb. 12, 2011

DANCE

Adventures in Ballet & Tap      
3 – 6 years Instructor:  Ann Newby
Tots ages 3 – 6 years old develop a greater sense of rhythm, flexibility and coordination as they explore the basic elements of movement.
Saturdays   9 - 10 a.m.     Jan. 8 – Feb. 12        Six-week fees:   $30 


African Storytelling
3 – 6 years Instructor:  Ann Newby
Tots ages 3 – 6 years old explore storytelling and fables through spoken word, music, movement and visual arts experiences.
Saturdays   10 – 11 a.m.    Jan. 8 – Feb. 12        Six-week fee:   $30


African Dance / Children

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

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

All current text

REPLACE with all the following:

Winter 2011 Class Schedule 

Winter 2011 Class Registration Dates:  Dec. 6, 2010 – Jan. 1, 2011
Winter 2011 Class Session Dates:  Jan. 5 – Feb. 12, 2011

DANCE

Adventures in Ballet & Tap      
3 – 6 years Instructor:  Ann Newby
Tots ages 3 – 6 years old develop a greater sense of rhythm, flexibility and coordination as they explore the basic elements of movement.
Saturdays   9 - 10 a.m.     Jan. 8 – Feb. 12        Six-week fees:   $30 

African Storytelling
3 – 6 years Instructor:  Ann Newby
Tots ages 3 – 6 years old explore storytelling and fables through spoken word, music, movement and visual arts experiences.
Saturdays   10 – 11 a.m.    Jan. 8 – Feb. 12        Six-week fee:   $30

African Dance / Children
4b9b3361

Ответ 1

Замена

^(\s*\r\n){2,}

С

\r\n

Это то, с чем я закончил.

Это выбирает только пустые строки в два или более числах и заменяет их одним.

Ответ 2

Это зависит от конца строки. Предполагая \n, заменим это:

([ \t]*\n){3,}

с \n\n.

Ответ 3

В Vim, используя

:%!cat -s

Я нахожу, что это самый простой способ удалить лишнюю пустую строку.

Ответ 4

Замена

\n\s*\n\s* 

с

\n\n

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

Ответ 5

Попробуйте этот perl oneliner perl -00pe0, если вы хотите на месте редактирования, просто добавьте опцию -i

Ответ 6

Я не уверен, что UltraEdit позволяет вам уйти в области "replace", но если вы не можете использовать новую строку (раньше у меня была эта проблема), но можете использовать ссылки на захват, это может сработать:

Find    : \s*(\r\n)\s*(\r\n)\s*\r\n
Replace : $1$2

Не тестируется широко, но, похоже, работает с образцом, который вы предоставили.

Ответ 7

См. этот поток, что вызывает проблему. Как я понимаю, регулярные выражения UltraEdit являются жадными на уровне символов (т.е. Внутри строки), но не жадные на уровне линии (грубо говоря). У меня нет доступа к UE, но я бы попробовал написать регулярное выражение, чтобы он соответствовал чем-то конкретному после последней пустой строки. Например:

search:   (\r\n[ \t]*){2,}(\S)
replace:  $1$2

Это сопоставляет и захватывает два или более экземпляра разделителя строк и любые горизонтальные пробелы, которые следуют за ним, но он сохраняет только последний. \S должен заставить его поддерживать совпадение, пока не найдет строку с хотя бы одним символом без пробелов.

Я признаю, что у меня нет большой уверенности в этом решении; Поддержка регулярного выражения UltraEdit повреждена его линейной архитектурой. Если вы хотите, чтобы редактор, который правильно выполняет регулярные выражения, и вы не хотите изучать новый синтаксис regex (например, vim's), получите EditPadPro.

Ответ 8

Также следует работать с пробелами в пустых строках

  • Поиск -/\n ^\s *\n/
  • Заменить -\n\n

Ответ 9

Для полноты я хочу здесь ссылаться на большой пост Удалить/удалить пустые и пустые строки на форумах пользователя UltraEdit, который находится внизу после все объяснения для новичков - решение для сокращения 2 или более строк без ничего (пустые строки) или просто пробелы (пустые строки) до 1 пустой строки, независимой от типа терминатора линии.

И некоторые слова о том, что Алан Мур написал выше:

Поддержка регулярного выражения UltraEdit Perl не искажается своей линейной архитектурой. У двигателей регулярного выражения Perl есть флаг, который определяет, соответствует ли точка всем символам, кроме новых символов строки (возврат каретки и строки) или действительно все символы, включая CR и LF. Это имеет значение, если текстовый файл интерпретируется как большой поток байтов или как последовательность строк для регулярного выражения Perl находит/заменяет. В UltraEdit флаг устанавливается по умолчанию, чтобы не включать \r и\n точкой в ​​строке поиска регулярных выражений. Но это поведение можно легко изменить в UltraEdit, начав строку регулярного выражения с помощью (?s), которая изменяет значение флага match_not_dot_newline, как указано в пользовательских форумах UltraEdit, в теме . в регулярных выражениях Perl не включают CRLF?.