Регулярное выражение в Notepad++, чтобы найти строки без ровно 9 труб

у меня есть CSV, который нужно очистить, прежде чем читать его в таблицу. Труба-delimted, структура 10 колонок. Проблема в том, что в некоторых записях 9-я колонка имеет возврат каретки. Мне нужно заменить эти экземпляры CRLF строкой символов (как держатели места), например#$%, но мне нужно только заменить crlf, которые являются в 9-й столбец для каждой записи.

так вот в этом примере:

Susan|Ward    |1     |1          |1     |1     |0     |||3250905     
Allen|Doe|4     |1          |1     |1     |0     ||
some text
text
more text in the same column|3250061     
Mary|James|4     |1          |1     |1     |0     |||3250061     Albert|Nordling|1     |1          |1     |0     |0     |||900434      
Henry|Johnson|1     |1          |1     |0     |0     |||900434      
Tony|Anderson    |1     |1          |1     |1     |0     |||3250905     

записи для Сьюзан, Генри и Тони все есть 9 труб, но у Аллена есть экземпляры CRLFs (в Notepad++), которые необходимо заменить, чтобы "вытащить" их все до одной строки, чтобы получить эту запись на одной строке.

кроме того, записи Мэри и Альберта находятся на одной линии. Мне нужно найти и их, чтобы разделить.

таким образом, регулярное выражение, чтобы найти строки, которые не имеют ровно 9 труб, сделало бы трюк.

Я могу найти записи с 9-м столбцом на нескольких строках с этим регулярное выражение:

^[^|]*$

но я не могу понять, как найти все линии не есть 9 труб (10 колонок). Это не сработает:

^[^|{9}]*$

что бы это сделать?

один конкретный момент: если вообще возможно, мне нужно, чтобы поиск мог выбрать весь блок строк (который будет каждой записью), у которых нет 9 труб. Поэтому в моем примере строка, начинающаяся с Allen, поиск в Notepad++ выделит эту строку и следующие 3 строки. Регулярное выражение ^[^|]*$ выбрал бы все три линии после линии Аллена, так как это ищет линии без труб вообще.

28
задан marky
31.12.2022 23:44 Количество просмотров материала 3499
Распечатать страницу

1 ответ

вы можете использовать это выражение для сопоставления строк ровно с 10 столбцами:

^([^|\n]*\|){9}[^|\n]*$

Вы можете проверить это здесь

где:

  • ^ ... $ соответствует началу и концу строки
  • [^|\n]* соответствует содержимому столбца (нет | и нет новой строки; может быть даже пустой)
  • \| матчи трубы (должны быть экранированы

соответствие строк с менее чем девятью колонки:

^([^|\n]*\|){0,8}[^|\n]*$

соответствие строк с менее чем девятью столбцами:

^([^|\n]*\|){10,1000}[^|\n]*$

обновление

играя вокруг немного это, кажется, работает, чтобы найти строки с не совсем 10 столбцов (9 |):

(^([^|\r\n]*\|){0,8}[^|\r\n]*$)|(^([^|\r\n]*\|){10,1000}[^|\r\n]*$)

Проверьте это здесь

3
отвечен Máté Juhász 2023-01-02 07:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх