【问题标题】:Regex to Match mRNA Sequences正则表达式匹配 mRNA 序列
【发布时间】:2019-02-28 17:21:10
【问题描述】:

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

  1. mRNA 以起始密码子 (ATG) 开头
  2. mRNA 的编码部分以三个终止密码子之一 (TAA/TAG/TGA) 结束
  3. 在终止密码子之后立即有一个“poly(A) 尾”。多聚 (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)

【问题讨论】:

  • 请提供示例字符串(有效/无效)。也许解析器会是更好的选择。
  • 感谢您的评论!这是一个家庭作业,所以我需要使用正则表达式。就示例字符串而言,创建简单案例或包含我正在处理的实际序列会更好吗?只是因为它们很长(约 2000 个字符)。
  • 可能问题出在字符串中重复的 TAA/TAG/TGA 上?试试^ATG(?:(?!T(?:AA|AG|GA))[ATCG])*T(?:AA|AG|GA)A{5,}$
  • @Sian 一个简单的案例更好
  • 你的正则表达式很好 - regex101.com/r/Q6jSrN/1

标签: python regex jupyter-notebook bioinformatics


【解决方案1】:

之所以如此,是因为第一个 * 是贪婪的,并且会尝试尽可能多地匹配,匹配您的所有后缀,并且正则表达式解析器永远不会超出解析 [ATCG] 的范围。

但是,$ 应该使它像您期望的那样工作,因此您的正则表达式对您的任务完全有效,也许有一些未知的条件我在您的问题中看不到。

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

我使用惰性*? 代替*,以及一个非捕获组(?:)A{5,} 代替A{5}A* 只是为了优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2013-12-30
    • 2018-01-09
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多