Как выбрать только определенные подстроки - PullRequest
0 голосов
/ 05 декабря 2011

из строки скажем 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

это все еще не дает мне подстроку с длиной, кратной трем. , Есть идеи, что случилось?

я ожидаю, что будут напечатаны только подстроки, длина которых делится на три

Ответы [ 4 ]

1 голос
/ 07 декабря 2011

Для включения подстрок перекрытия, у меня есть следующая длинная версия.Идея состоит в том, чтобы найти все начальные и конечные метки и вычислить расстояние между ними.

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']
0 голосов
/ 06 декабря 2011

Вы также можете использовать регулярное выражение для этого:

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

внутренние скобки соответствуют 3 буквам одновременно.

0 голосов
/ 06 декабря 2011

re.findAll () вернет вам массив совпадающих строк. Вам нужно перебрать каждую из них и выполнить модуль по этим строкам, чтобы достичь того, что вы хотите.

0 голосов
/ 05 декабря 2011

Использование по модулю - правильная процедура. Если это не работает, вы делаете это неправильно. Пожалуйста, предоставьте пример вашего кода для его отладки.

...