Ответ 1
Замена
^(\s*\r\n){2,}
С
\r\n
Это то, с чем я закончил.
Это выбирает только пустые строки в два или более числах и заменяет их одним.
У меня есть файл, который мне нужно переформатировать и удалить лишние пустые строки.
Я использую поиск регулярных выражений синтаксиса 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
Замена
^(\s*\r\n){2,}
С
\r\n
Это то, с чем я закончил.
Это выбирает только пустые строки в два или более числах и заменяет их одним.
Это зависит от конца строки. Предполагая \n, заменим это:
([ \t]*\n){3,}
с \n\n
.
В Vim, используя
:%!cat -s
Я нахожу, что это самый простой способ удалить лишнюю пустую строку.
Замена
\n\s*\n\s*
с
\n\n
должен сделать трюк
Попробуйте этот perl oneliner perl -00pe0
, если вы хотите на месте редактирования, просто добавьте опцию -i
Я не уверен, что UltraEdit позволяет вам уйти в области "replace", но если вы не можете использовать новую строку (раньше у меня была эта проблема), но можете использовать ссылки на захват, это может сработать:
Find : \s*(\r\n)\s*(\r\n)\s*\r\n
Replace : $1$2
Не тестируется широко, но, похоже, работает с образцом, который вы предоставили.
См. этот поток, что вызывает проблему. Как я понимаю, регулярные выражения UltraEdit являются жадными на уровне символов (т.е. Внутри строки), но не жадные на уровне линии (грубо говоря). У меня нет доступа к UE, но я бы попробовал написать регулярное выражение, чтобы он соответствовал чем-то конкретному после последней пустой строки. Например:
search: (\r\n[ \t]*){2,}(\S)
replace: $1$2
Это сопоставляет и захватывает два или более экземпляра разделителя строк и любые горизонтальные пробелы, которые следуют за ним, но он сохраняет только последний. \S
должен заставить его поддерживать совпадение, пока не найдет строку с хотя бы одним символом без пробелов.
Я признаю, что у меня нет большой уверенности в этом решении; Поддержка регулярного выражения UltraEdit повреждена его линейной архитектурой. Если вы хотите, чтобы редактор, который правильно выполняет регулярные выражения, и вы не хотите изучать новый синтаксис regex (например, vim's), получите EditPadPro.
Также следует работать с пробелами в пустых строках
Для полноты я хочу здесь ссылаться на большой пост Удалить/удалить пустые и пустые строки на форумах пользователя UltraEdit, который находится внизу после все объяснения для новичков - решение для сокращения 2 или более строк без ничего (пустые строки) или просто пробелы (пустые строки) до 1 пустой строки, независимой от типа терминатора линии.
И некоторые слова о том, что Алан Мур написал выше:
Поддержка регулярного выражения UltraEdit Perl не искажается своей линейной архитектурой. У двигателей регулярного выражения Perl есть флаг, который определяет, соответствует ли точка всем символам, кроме новых символов строки (возврат каретки и строки) или действительно все символы, включая CR и LF. Это имеет значение, если текстовый файл интерпретируется как большой поток байтов или как последовательность строк для регулярного выражения Perl находит/заменяет. В UltraEdit флаг устанавливается по умолчанию, чтобы не включать \r и\n точкой в строке поиска регулярных выражений. Но это поведение можно легко изменить в UltraEdit, начав строку регулярного выражения с помощью (?s)
, которая изменяет значение флага match_not_dot_newline
, как указано в пользовательских форумах UltraEdit, в теме . в регулярных выражениях Perl не включают CRLF?.