Meine Frage folgt dieser: Datei (1) und Magie (5): Beschreibung anderer Formate .
Ich möchte eine FASTA-Sequenz beschreiben ( http://en.wikipedia.org/wiki/FASTA_format )
Es könnte eine DNA-Sequenz sein (nur mit ATGC)
>header
ATGCTAGCATAGCATCGATGCTGTAGCTACGTAGCTACGTCTACG
Ein "magisches" Muster wäre
>.*\n[ATGC]*
oder eine PROTEIN- Sequenz (ACDEFGHIKLMNPQRSTVWYBZX, die auch ATGC enthält)
>header
AHITKLMNPQRGHIKLMNPQRC
Ein "magisches" Muster wäre
>.*\n[ACDEFGHIKLMNPQRSTVWYBZX]*
Aber wenn ich diese regulären Ausdrücke verwende, sagt mir die Datei, dass es sich um ein Protein handelt, da es mit dem 2. regulären Ausdruck übereinstimmt. Gibt es eine Möglichkeit, ein Ergebnis zu priorisieren? Gibt es eine Möglichkeit zum Proritieren, etwa "Versuchen Sie kein anderes Muster, wenn dieses übereinstimmt?".
regular-expression
file-command
Pierre
quelle
quelle
U
(Sec) als auchO
(Pyl) sind korrekte und gültige Aminosäurecodes, und Sie können auch*
für STOP sowie die verschiedenen IUPAC-Codes wieY
für Pyrimidine usw. in Nukleotidsequenzen sowie einfach-
für Lücken oderX
oderN
für maskierte oder unbekannte Reste finden . Ich bin mir ziemlich sicher, dass die meisten Programme einige ziemlich komplexe Heuristiken verwenden werden, um zwischen DNA (und Sie scheinen hier RNA zu ignorieren) und Protein zu wählen. Ich bezweifle sehr, dass Sie es mit einer einfachen Regex tun können.>.*\n[ATCGXN-]*\n
zum Beispiel für DNA (Ignorieren der anderen IUPAC-Codes ).Antworten:
Sie können Prioritäten mit einem "Stärke" -Wert festlegen. Aus Magie (5) :
Fügen Sie diese Zeile hinzu, um die Priorität der PROTEIN-Beschreibung zu verringern:
... wo
N
ist groß genug, um es unter die Punktzahl der DNA-Beschreibung zu bringen.Die "aktuell berechnete Standardmagiestärke" eines Tests ist nicht sofort offensichtlich, aber Sie können das
--list
Flag verwenden, um alle anzuzeigen. Alternativ lesen Sie die Quelle - die verantwortliche Funktion istapprentice_magic_strength
. Es wird aus dem ersten Test des Eintrags berechnet. Wenn Sie also einem Typ Vorrang vor einem anderen geben möchten, ist es hilfreich, identische erste Zeilen zu haben. (Auf diese Weise mussN
nur 1 sein.)Ein weiteres Problem: Ihre regulären Ausdrücke sind nicht streng genug.
*
kann mit null Zeichen übereinstimmen, sodass das Muster am Anfang jeder Zeile steht - Protein, DNA oder andere. Vergewissern Sie sich zum Verschärfen, dass die gesamte Zeile nur aus den zulässigen Zeichen besteht :\n[ATGC]+$
, oder\n[ATGC]{num,}$
(wobei num das kürzeste Muster ist, das Sie erwarten)quelle