Exclua tudo na segunda coluna, não entre parênteses

Exclua tudo na segunda coluna, não entre parênteses

Eu tenho um arquivo parecido com este:

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

O arquivo é delimitado por tabulações; há uma guia entre a primeira coluna (ID do gene) e a segunda coluna (nome da proteína). (O nome da proteína pode conter espaços, mas não tabulações.) O nome da proteína contém uma string entre parênteses, por exemplo, (PTHR33076:SF11); esta é a proteínaEU IA. Quero manter a primeira coluna e excluir tudo na segunda coluna, exceto o ID da proteína (e seus parênteses). Então a saída ficaria assim:

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

Como posso fazer isso? Marquei todos os IDs entre parênteses usando a função "mark" e inserindo (\w+\d+:\w+\d+)para destacar todos os IDs entre parênteses, mas não consigo manipular. Como observação, alguns dos nomes de proteínas possuem outras strings entre parênteses (por exemplo, veja a primeira linha, onde o nome da proteína contém, (Z)bem como o valor de ID que desejo). Eu não quero ficar com isso.

Responder1

Você pode fazer isso pesquisando e substituindo uma expressão regular. Pressione Ctrl+ Hpara abrir a caixa de diálogo Substituir. Certifique-se de que o modo de pesquisa esteja Regular Expression.

Encontre o que:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

Substituir com:

\1\2

Explicação do padrão:

[^\t\r\n]+é qualquer sequência de caracteres que não contém tabulação, nova linha ou retornos de carro. Isso deve corresponder apenas ao texto em uma coluna do seu arquivo.

^[^\t\r\n]+corresponde ao conteúdo da primeira coluna porque o entrelinha ^limita a correspondência ao início de uma linha.

O primeiro grupo de captura (^[^\t\r\n]+\t)corresponde ao conteúdo do primeiro campo e da guia seguinte.

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*corresponde ao conteúdo do segundo campo e corresponde apenas se a expressão entre parênteses estiver presente.

O segundo grupo de captura (\(\w+\d+:\w+\d+\))corresponde à expressão entre parênteses.

O padrão de substituição \1\2retorna o primeiro e o segundo grupos de captura. Isso exclui efetivamente o texto ao redor do segundo campo porque essa parte da correspondência não está incluída em um grupo de captura.

Responder2

Se o ID da proteína (entre parênteses) for sempre a última coisa na linha (como você mostrou), deve ser bom o suficiente para procurar \t.*( (ou possivelmente \t[^\r\n]*() e substituí-lo por \t(.

informação relacionada