0

次の正規表現を使用しています。

orfre = '^(?:...)*?((ATG)(...){%d,}?(?=(TAG|TAA|TGA)))' % (aa)

私は基本的に、ATG で始まり、その後にトリプレット (TTA、TTC、GTC など) が続くすべてのシーケンスを、フレーム内の終止コドンが見つかるまで見つけたいと考えています。ただし、私の正規表現が書かれているように、aaが大きい場合、実際には停止コドンで停止しません。代わりに、aa の条件を満たすものが見つかるまで検索を続けます。終止コドンが見つかるまで、文字列全体を検索するようにしたいと思います。(指定された aa 引数に対して) 一致が十分に長くない場合は、None を返す必要があります。

文字列データ: AAAATGATGCATTAACCCTAATAA

正規表現からの望ましい出力: ATGATGCATTAA

aa > 5 でない限り、何も返されません。

私が得ている実際の出力: ATGATGCATTAACCCTAA

4

2 に答える 2

0

これでうまくいくはずです。codepad で見ることができます

import re

num = 4
blue = 'XXXAAAATGATGCATTAACCCTAATAAXXX'
pattern = "^(?:...)*(ATG(...){%d}(?:TAG|TAA|TGA))" % num

m = re.match(pattern, blue)
print m.group(1)

どの出力:ATGCATTAACCCTAATAA

それを分解する:

^
(?:...)*           - Find, but don't capture any number of triplets.
(                  - Begin our capture block
  ATG              - A literal string of 'ATG', no need to wrap.
  (...)*           - Any number of triplets
  (?:TAG|TAA|TGA)  - A non capturing block of either 'TAG', 'TAA' or 'TGA'
)                  - End the capture block.

他の要件が欠けていない限り、これよりもはるかに複雑にする必要はありません。

于 2013-09-11T03:43:51.080 に答える
0

補足: 1 つのシーケンスで利用可能な 6 つのフレームを確認する場合は、相補鎖も確認することを忘れないでください。

comp_chain = chain[::-1]    

(->拡張スライス)

後者の A を T に、G を C に音訳します。

于 2013-09-12T09:53:29.927 に答える