2015-12-29 3 views
1

Я новичок в регулярном выражении.Regex для замены новой строки между трубами в Notepad ++

У меня есть текстовый файл с разделителями по трубе, содержащий свободные текстовые данные. Мне нужно найти способ заменить символы новой строки в свободных текстовых полях запятыми в Notepad ++. Существует фиксированное количество 23 полей.

Мне удалось найти ^([^\|]*\|){22}[^\|]*$, чтобы определить полную запись. Как заменить строки новой строки (\ n) в этих строках, чтобы свернуть все в один лайнер?

Образец данных в regex101.com: https://regex101.com/r/aY4jF3/2 записей, которые начинаются с 1a и 1c необходимости быть свернуты в одну строку с запятыми между значением поля 13 в (... | 1,3 | ...)

Заранее спасибо!

+0

Только 1a и 1c, линии, которые разделены. 1b и 1d - примеры полных записей. –

ответ

2

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

(^(?:[^\|\n]*\|){1,21}[^\|\n]+)[\r\n]{1,2} 

Первая группа ((^(?:[^\|\n]*\|){1,21}[^\|\n]+)) фиксирует линии, имеющие до 21 символов трубы (так что линии, которые не полный). Это группа захвата, поскольку она потребуется для замены. Остальное соответствует новым строковым символам.

И вы должны заменить

\1, 

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

Если вы поместите курсор в начало файла и замените его, он будет работать правильно, если объединенные линии образуют полные строки (с более чем 21 трубой). После того, как первая половина будет объединена со второй, полная строка больше не будет соответствовать регулярному выражению, а замена будет продолжена.

Перед заменой:

enter image description here

После замены:

enter image description here

Испытано в Notepad ++ 6.8.8.

+1

Это сработало! Спасибо за быстрый ответ. –

Смежные вопросы