所以我要做的是让一个函数在字符串中找到一个序列“ATG”,然后从那里开始以3为单位沿着字符串移动,直到找到一个“TAA”、“TAG”或“TGA”(ATG xxx xxx TAA | TAG | TGA)
为此,我编写了这行代码(其中fdna
是输入序列)
ORF_sequences = re.findall(r'ATG(?:...)*?(?:TAA|TAG|TGA)',fdna)
然后我想增加3个要求:
为了执行此部分,我将代码更改为:
ORF_sequence_finder = re.findall(r'[AG]..ATGG..(?:...){7,}?(?:TAA|TAG|TGA)',fdna)
我想要的不是所有这些限制,而是要求1(大于或等于30个字符),然后要求2(A | G-x-x-A-T-G-x-x-x)或要求3(A-T-G-G-x-x)或两者兼而有之。
如果我将上面的行分成两行,并将它们附加到一个列表中,它们就会出现顺序错误并重复出现。
以下是不同案例的几个例子:
sequence1 = 'AGCCATGTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTGAAAA'
sequence2 = 'ATCCATGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTAG'
sequence3 = 'AGCCATGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTAG'
sequence4 = 'ATGGGGTGA'
sequence1 = 'A**G**CC*ATG*TGGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TGA*AAA'
sequence1
将被标准接受,因为它遵循要求2(A | G-x-x-A-T-G-x-x-x-x),并且其长度大于等于30。你知道吗
sequence2 = 'ATCC*ATG***G**GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TAG*
sequence2
将被接受,因为它遵循要求3(A-T-G-G-x-x),并且其长度大于等于30
sequence3 = 'A**G**CC*ATG***G**GGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TGA*AAA'
sequence3
将被接受,因为它既满足要求2又满足要求3,同时还具有大于等于30个字符。你知道吗
sequence4 = 'ATGGGGTGA'
sequence4
将不被接受,因为它的NOT>;=30不符合要求2或要求3。你知道吗
所以基本上,我希望它在满足需求1的同时,接受遵循需求2和/或需求3(或两者)的序列。
我怎样才能在不添加重复项(在两者都出现的情况下)和不乱序的情况下将其拆分?
如果长度要求中可能包含
[AG]..
,则可以使用:或者如果不想在匹配中包含
[AG]..
,可以使用lookarounds:相关问题 更多 >
编程相关推荐