所以我有四行代码
seq= 'ATGGAAGTTGGATGAAAGTGGAGGTAAAGAGAAGACGTTTGA'
OR_0 = re.findall(r'ATG(?:...){9,}?(?:TAA|TAG|TGA)',seq)
让我先解释一下我要做什么。. . 如果这令人困惑,我很抱歉,但我会尽力解释它。
所以我正在寻找以'ATG'开头的序列,后跟任何单词字符的3个单位[例如'GGG','GTT','TTA'等],直到它遇到'TAA','TAG'或“TGA”我还希望它们至少有 30 个字符长。. . 因此 {9,}?
这在某种程度上有效,但如果你注意到在seq中有ATG GAA GTT GGA TGA AAG TGG AGG TAA AGA GAA GAC GTT TGA
所以在这种情况下,如果它从第一个 'ATG' 开始并一直到下一个'TAA'、'TAG' 或 'TGA',它应该找到 'ATGGAAGTTGGATGA '
但是,当您运行 OR_0 代码行时,它会吐出整个 seq 字符串。我不知道如何让它只考虑第一个'TAA','TAG'或'TGA',然后是第一个'ATG'
如果在以 3 为单位读取时,“ATG”后面跟着另一个“ATG”,那没关系,它不应该重新开始,但如果在以 3 为单位读取时遇到“TAA”、“TAG”或“TGA”它应该停止。
我的问题,为什么 re.findall 会找到最长的 'ATG'xxx-xxx-['TAA','TAG' or 'TGA'] 序列,而不是第一次出现的 'TAA','TAG' 或 'TGA'在以 3 为单位的单词字符分隔的 ATG 之后?
再一次,如果这令人困惑,我深表歉意,但它弄乱了我基于此初始文本行的多个数据集,我正试图找出原因