Localizar / substituir IDs repetidos em CSV
O regex não totalmente otimizado, mas funcional que usei foi:
(GO:[\d]+),(GO:[\d]+)(.*)
substituindo por:
$1$3\n$2$3
Dando a saída:
ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,
Observe que isso não duplica a vírgula em sua saída desejada, pois achei que poderia ser um efeito colateral, em vez do desejado.
Se a vírgula duplicada for desejada, use:
$1,$3\n$2$3
como substituto.
Explicação
(GO:[\d]+)
- primeiro grupo de captura, correspondência literal "GO:" seguido por um ou mais dígitos ( $1
)
,
- corresponde à vírgula literal (usada para detectar IDs repetidos / ignorar os não repetidos)
(GO:[\d]+)
- 2º grupo de captura, igual ao primeiro! ( $2
)
(.*)
- 3º grupo de captura, correspondência de 0 ou mais de "qualquer coisa" - abreviação de "resto da linha" aqui ( $3
)
$1$3\n$2$3
- print id 1
seguido por resto da linha; então uma nova linha; print id 2
seguido pelo restante da linha
Advertência
Esteja ciente de que, para que a expressão regular acima funcione, você deve ter a opção de pesquisa . matches newline
desativada. Caso contrário, o terceiro grupo de captura corresponderá muito.