arquivo (1) e magia (5): priorizando um resultado

6

Minha pergunta segue essa: arquivo (1) e mágica (5): descrevendo outros formatos .

Eu quero descrever uma sequência FASTA ( link )

Poderia ser uma seqüência de DNA (com apenas ATGC)

>header
ATGCTAGCATAGCATCGATGCTGTAGCTACGTAGCTACGTCTACG

Um padrão "mágico" seria

>.*\n[ATGC]*

ou uma sequência PROTEIN (ACDEFGHIKLMNPQRSTVWYBZX contendo ATGC também)

>header
AHITKLMNPQRGHIKLMNPQRC

Um padrão "mágico" seria

>.*\n[ACDEFGHIKLMNPQRSTVWYBZX]*

Mas sempre que eu uso essas expressões regulares, o arquivo me diz que é uma proteína porque corresponde ao segundo regex. Existe uma maneira de priorizar um resultado? Existe uma maneira de classificar, algo como: "Não tente outro padrão se este corresponder?".

    
por Pierre 06.09.2014 / 16:17

1 resposta

1

Você pode definir prioridades usando um valor de "força". De mágica (5) :

An optional strength can be supplied on a separate line which refers to the current magic description using the following format:

    !:strength OP VALUE

The operand OP can be: +, -, *, or / and VALUE is a constant between 0 and 255. This constant is applied using the specified operand to the currently computed default magic strength.

Para diminuir a prioridade da descrição PROTEIN, anexe esta linha:

!:strength - N

... onde N é grande o suficiente para ficar abaixo da pontuação da descrição do DNA.

A "força mágica padrão computada atualmente" de um teste não é imediatamente óbvia, mas você pode usar o sinalizador --list para mostrar todos eles. Como alternativa, leia a fonte - a função responsável é apprentice_magic_strength . É calculado a partir do primeiro teste da entrada, portanto, se você quiser dar a um tipo uma precedência sobre o outro, ter as primeiras linhas idênticas é útil. (Dessa forma, N só precisa ser 1.)

Um outro problema: seus regexps não são rigorosos o suficiente. * pode corresponder a zero caracteres, então o padrão é encontrado no início de cada linha - proteína, DNA ou outro. Para apertar, confirme que a linha inteira consiste somente dos caracteres permitidos: \n[ATGC]+$ , ou \n[ATGC]{num,}$ (onde num é o padrão mais curto que você espera ver)

0       string  =>header
>&0      regex   \n[ATGC]+$     DNA

0       string  =>header
>&0      regex   \n[ACDEFGHIKLMNPQRSTVWYBZX]+$  PROTEIN
!:strength - 1
    
por 10.03.2015 / 00:55