Eu tenho um CSV que preciso limpar antes de lê-lo em uma tabela. É uma estrutura de 10 colunas, delimitada por canos. O desafio é que, em alguns registros, a 9ª coluna tem retornos de carro. Eu preciso substituir essas instâncias CRLF com uma string de símbolos (como placeholders), como # $%, mas eu só preciso substituir os CRLFs que estão dentro da 9ª coluna, para cada registro . / p>
Então, neste exemplo:
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
Os registros de Susan, Henry e Tony têm 9 canais, mas Allen tem instâncias de CRLFs (no Notepad ++) que precisam ser substituídas para "puxar" todas para a mesma linha para obter esse registro em uma linha.
Além disso, os registros de Mary e Albert estão juntos em uma linha. Eu preciso ser capaz de encontrá-los também para que eu possa dividi-los.
Assim, um regex para encontrar linhas que não tenham exatamente 9 canais faria o truque.
Eu posso encontrar os registros com a 9ª coluna em várias linhas com este regex:
^[^|]*$
Mas não consigo descobrir como encontrar todas linhas que não possuem 9 canais (10 colunas). Isso não funcionará:
^[^|{9}]*$
O que faria isso?
Um ponto específico: Se for possível, preciso que a pesquisa selecione um bloco inteiro de linhas (que seriam cada registro) que não tenham 9 canais. Então, no meu exemplo, a linha que começa com Allen, uma pesquisa no Notepad ++, destacaria essa linha e as três linhas seguintes. O regex ^[^|]*$
selecionaria todas as três linhas após a linha Allen, já que está procurando linhas sem tubos.