在真核生物中,剪接的mRNA具有三个关键特性:
因此,基本上,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)
答案 0 :(得分:0)
之所以这样工作是因为第一个*
很贪婪,它会尝试尽可能匹配,匹配所有后缀,而regex解析器永远不会超出解析[ATCG]
的范围。
$
应该可以如您期望的那样工作,因此您的正则表达式对于您的任务是完全有效的,也许有些未知的条件我无法通过您的问题看到。
尝试^ATG[ATCG]*?T(?:AA|AG|GA)A{5,}$
我使用了懒惰的*?
而不是*
,还使用了一个非捕获组(?:)
和A{5,}
而不是A{5}A*
来进行优化。