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

  • mRNA以起始密码子(ATG)开头
  • mRNA的编码部分以三个终止密码子(TAA/TAG/TGA)之一结尾
  • 终止密码子后立即有一个“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)
    

    最佳答案

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

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

    试试^ATG[ATCG]*?T(?:AA|AG|GA)A{5,}$
    我使用了惰性*?而不是*,并且还使用了一个非捕获组(?:)A{5,}而不是A{5}A*来进行优化。

    关于python - 正则表达式匹配mRNA序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54931073/

    10-09 21:30