У меня есть 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 строки. Регулярное выражение ^[^|]*$
выберет все три строки после линии Аллена, так как это ищет линии без труб вообще.