2017-01-02 5 views
2

私はFASTAフォーマットのDNA配列中の複数の特定の配列を探して、それらをプリントアウトしようとしています。簡単にするために、問題を示すために短い文字列を作成しました。FASTAフォーマットの配列を検索

import re 
seq = "QPPLSK" 
find_in_seq = re.search(r"[^P](P|K|R|H|W)", seq) 
print find_in_seq.string[find_in_seq.start():find_in_seq.end()] 

「QP」と「SK」の2つの一致がある場合、一致「QP」の出力が1つだけ得られます。最初の試合だけを表示するのではなく、2つの試合を表示するにはどうすればよいですか?

おかげ

答えて

0

使用re.findallとこれ以上のキャプチャグループがあるように正規表現を変更 - [^P](?:P|K|R|H|W)または[^P][PKRHW]

import re 
seq = "QPPLSK" 
find_in_seq = re.findall(r"[^P][PKRHW]", str(seq)) 
print(find_in_seq) 

Python demo

注を参照してくださいこと、あなたはどれにも一致する場合P以外の文字の場合は、[A-OQ-Z]を使用することをおすすめします。

+0

ありがとうございますが、メソッドが動作しないFASTAフォーマットで同じメソッドを実行しようとしたとき – thenoob

+0

'seq'が文字列の場合、動作します。 'str(seq)'を入力として渡してみてください。 –

+0

はい、私はこのような[( 'A'、 'S'、 'T'、 'Q')、( 'F'、 'W'、 'J'、 'M')の代わりにシーケンスが表示されます。最初に一致したシーケンスは表示されません。 strを使って文字列として解析しても、文字列ではないと思います。文字列でなければ、re.searchも機能しません。 – thenoob