私の質問は次のとおりです。file(1) と Magic(5): 他の形式の説明。
FASTAシーケンスを説明したい(http://en.wikipedia.org/wiki/FASTA_format)
それDNA配列(ATGCのみ)
>header
ATGCTAGCATAGCATCGATGCTGTAGCTACGTAGCTACGTCTACG
「魔法の」パターンは
>.*\n[ATGC]*
またはタンパク質シーケンス(ACDEFGHIKLMNPQRSTVWYBZXにはATGCも含まれています)
>header
AHITKLMNPQRGHIKLMNPQRC
「魔法の」パターンは
>.*\n[ACDEFGHIKLMNPQRSTVWYBZX]*
しかし、この正規表現を使用するたびに、ファイルは2番目の正規表現と一致するため、それがタンパク質であると言います。結果の優先順位を決める方法はありますか? 「このパターンが一致したら他のパターンを試してはいけません」などの優先順位を設定する方法はありますか?
答え1
強度値を使用して優先順位を設定できます。 ~からマジック(5):
オプションの強度は、次の形式を使用して現在の魔法の説明を参照する別の行に提供できます。
!:strength OP VALUE
オペランドOPは+、-、*、または/であり、VALUEは0から255までの定数です。指定されたオペランドを使用して、現在計算されている基本馬力にこの定数を適用します。
タンパク質の説明の優先順位を下げるには、次の行を追加します。
!:strength - N
... N
DNAが説明する部分の下に置くのに十分な大きさです。
テストの「現在計算された基本魔法強度」はすぐには明確ではありませんが、その--list
フラグを使用してすべてを表示できます。または、ソースコードを読んでください。担当機能は次のとおりです。apprentice_magic_strength
。これはアイテムの最初のテストに基づいて計算されるため、あるタイプが他のタイプよりも優先されるようにするには、同じ最初の行を持つことが役立ちます。 (こうすればN
1だけあればいいです。)
別の問題:正規表現は十分に厳格ではありません。 *
ゼロ文字が一致する可能性があるため、タンパク質、DNAなどの各行の先頭にパターンを見つけることができます。締め付けるには、行全体に次のものが含まれていることを確認します。ただ許容される文字数: \n[ATGC]+$
、 または\n[ATGC]{num,}$
(ここで num は予想される最短パターンです。)
0 string =>header
>&0 regex \n[ATGC]+$ DNA
0 string =>header
>&0 regex \n[ACDEFGHIKLMNPQRSTVWYBZX]+$ PROTEIN
!:strength - 1