如何仅选择某些子字符串

时间:2011-12-05 19:46:47

标签: python biopython

来自字符串的

说dna ='ATAGGGATAGGGAGAGAGCGATCGAGCTAG' 我有子串说dna.format ='ATAGGGATAG','GGGAGAGAG' 我只想打印长度可以被3整除的子串 怎么做?即时通讯使用模数但不起作用!

import re
if mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
print re.findall("ATA"(.*?)"AGA" , mydna)
if len(mydna)%3 == 0
   print mydna

更正后的代码

import re
mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
re.findall("ATA"(.*?)"AGA" , mydna.format)
if len(mydna.format)%3 == 0:
   print mydna.format

这仍然不能给我子串,长度可以被三整除。 。任何想法都错了吗?

我期待只能打印长度可被3整除的子串

4 个答案:

答案 0 :(得分:1)

为了包含重叠子串,我有以下冗长的版本。我们的想法是找到所有开始和结束标记并计算它们之间的距离。

mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start() and (end.start()-start.start())%3 == 0]
['ATAGGGATAGGG', 'ATAGGG']

显示所有子串,包括重叠的子串:

[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start()]
['ATAGGGATAGGG', 'ATAGGGATAGGGAG', 'ATAGGGATAGGGAGAGAGC', 'ATAGGG', 'ATAGGGAG', 'ATAGGGAGAGAGC']

答案 1 :(得分:0)

使用modulo是正确的程序。如果它不起作用,你做错了。请提供代码示例以进行调试。

答案 2 :(得分:0)

您也可以使用正则表达式:

re.findall('ATA((...)*?)AGA', mydna)

内括号一次匹配3个字母。

答案 3 :(得分:0)

re.findAll()将返回一个匹配字符串数组,您需要迭代每个字符串并对这些字符串执行模数以实现您想要的效果。