У меня есть CSV, который мне нужно очистить, прежде чем читать его в таблицу. Это разделенная трубой структура из 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 каналов, но у Аллена есть экземпляры CRLF (в Notepad++), которые необходимо заменить, чтобы "вытянуть" их все на одну и ту же строку, чтобы получить эту запись на одной строке.
Кроме того, записи Мэри и Альберта находятся в одной строке вместе. Я должен быть в состоянии найти их, чтобы разделить их.
Таким образом, регулярное выражение для поиска линий, которые не имеют ровно 9 каналов, сделало бы свое дело.
Я могу найти записи с 9-м столбцом в нескольких строках с помощью этого регулярного выражения:
^[^|]*$
Но я не могу понять, как найти все строки, которые не имеют 9 каналов (10 столбцов). Это не сработает:
^[^|{9}]*$
Что бы это сделать?
Один конкретный момент: если это вообще возможно, мне нужно, чтобы поиск позволял выделить весь блок строк (который будет каждой записью), который не имеет 9 каналов. Так что в моем примере строка, которая начинается с Аллена, поиск в Notepad++ выделит эту строку и следующие 3 строки. Регулярное выражение ^[^|]*$
выберет все три строки после строки Аллена, так как это ищет строки без труб вообще.