正则表达式以匹配mRNA序列

时间:2019-02-28 17:21:10

标签: python regex jupyter-notebook bioinformatics

在真核生物中,剪接的mRNA具有三个关键特性:

  1. mRNA以起始密码子(ATG)开头
  2. mRNA的编码部分以三个终止密码子(TAA / TAG / TGA)之一结尾
  3. 在终止密码子之后立即有一个“ poly(A)尾巴”。 poly(A)尾部是转录后连接到编码序列3'末端的许多腺嘌呤(A's)的序列。实际上,poly(A)尾部可能有数百个A,但是通常mRNA / cDNA的末端未完全测序,因此终止密码子后可能只有5个A。

因此,基本上,mRNA序列应以ATG开头,然后是任意数量的As,Cs,Ts或Gs,然后是TAA或TAG或TGA,然后是5个或更多的As。

我的(python)正则表达式是这样的:^ATG[ATCG]*T(AA|AG|GA)A{5}A*$

但是,这是匹配序列,在poly(A)尾部之后还有其他字符,好像没有识别$字符。我在做什么错了?

有效示例:

ATGCTGATGATGATGATAGAAAAA
ATGTGAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

无效示例:

ATGCTGATGXTGATGATAGAAAAA
TATGCTGATGXTGATGATAGAAAAA
ATGTGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC

编辑(我的完整代码):

file = open('potential_mRNA.fasta')
alignment = SeqIO.parse(file, 'fasta')
mRNA_seqs = []
mRNA_pattern = r'^ATG[ATCG]*T(AA|AG|GA)A{5}A*$'
for mrna in alignment:
    sequence = str(mrna.seq)
    if re.search(mRNA_pattern, sequence):
        mRNA_seqs.append(sequence)

1 个答案:

答案 0 :(得分:0)

之所以这样工作是因为第一个*很贪婪,它会尝试尽可能匹配,匹配所有后缀,而regex解析器永远不会超出解析[ATCG]的范围。

$应该可以如您期望的那样工作,因此您的正则表达式对于您的任务是完全有效的,也许有些未知的条件我无法通过您的问题看到。

尝试^ATG[ATCG]*?T(?:AA|AG|GA)A{5,}$

我使用了懒惰的*?而不是*,还使用了一个非捕获组(?:)A{5,}而不是A{5}A*来进行优化。