Notepad ++ regex localiza / substitui ids adjacentes

2

Eu tenho um arquivo csv com esta aparência:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Eu só preciso usar notepad++ para mover os IDs para sua própria linha e copiar o que estava na mesma linha para o final. Então, idealmente, a saída final ficaria assim:

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,

Eu tentei usar a função replace, encontrando instâncias de IDs uma ao lado da outra usando: (\w+:\d+),(\w+:\d+),(.*),[A-Z] e substituindo por $1,$3,$4\r$2,$3,$4 .

No entanto, toda vez que eu tentar e "encontrar" essas instâncias em notepad++ , ele iluminará toda a lista e o comando não funcionará.

Eu não sou muito experiente com isso, então se alguém puder me ajudar eu agradeceria! Obrigada!

arquivo original: link

Eu me livrei do cabeçalho e o transformei em um csv substituindo todas as guias por vírgulas.

    
por kevluv93 11.08.2015 / 07:15

1 resposta

1

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.

    
por 11.08.2015 / 07:30