Я пытаюсь использовать regex модуль для поиска неперекрывающиеся повторы (дублированные подстроки) в пределах заданной строки (30 символов), с учетом следующих требований:Найти повторы с определенной длиной в строку, используя Python
- Меня интересуют только неперекрывающиеся повторы длиной 6-15 символов.
- позволяет 1 неправильно матч
- возвратных позиции для каждого матча
Один из способов я подумал о том, что для каждой возможной длины повтора, пусть цикл питона через вход 30char строки. Например,
string = "ATAGATATATGGCCCGGCCCATAGATATAT" #input
#for 6char repeats, first one in loop would be for the following event:
text = "ATAGAT"
text2 ="(" + text + ")"+ "{e<=1}" #this is to allow 1 mismatch later in regex
string2="ATATGGCCCGGCCCATAGATATAT" #string after excluding text
for x in regex.finditer(text2,string2,overlapped=True):
print x.span()
#then still for 6char repeats, I will move on to text = "TAGATA"...
#after 6char, loop again for 7char...
Там должно быть два выхода для этой конкретной строки = "ATAGATATAT GGCCCGGCCC ATAGATATAT". 1. Смелое два несоответствия «ATAGATATAT» + 1: «ATAGATATATG» & «CATAGATATAT» с индексом положения, возвращенным как (0,10) & (19, 29); 2. «TGGCCC» & «GGCCCA» (необходимо добавить одно несоответствие не менее 6 символов), с индексом (9,14) & (15,20). Числа могут быть в списке или таблице.
Извините, что я не включил реальный цикл, но я надеюсь, что идея понятна ... Как вы можете видеть, это очень менее эффективный метод, не говоря уже о том, что он создаст избыточность - - например Повторы 10char будут засчитываться более одного раза, поскольку они подходят для 9,8,7 и 6 циклов повторений символов. Более того, у меня есть много таких 30 символов, с которыми нужно работать, поэтому я буду благодарен за ваши советы по поводу более чистых методов.
Большое спасибо :)
Можете ли вы добавить ввод и ожидаемый результат, чтобы сделать ваш вопрос более четким? – Kasramvd
Спасибо, что указали, что вне @Kasra AD, я только что сделал некоторые изменения и надеюсь, что теперь это станет немного более ясным. Ввод - строка, а выход - повторы с индексом позиции. – Helene
То, что вы не объяснили, - это то, что «повторение». Повторяется ли «АТАГАТАТАТ»? Если да, то почему? Только некоторые из этих букв повторяются. Почему не повторяет «GGGGGGG»? Это кажется довольно повторным. Что делает что-то «повторным»? – Brionius