Я пытаюсь написать сценарий, который найдет открытую рамку считывания последовательности ДНК. Тем не менее, мне нужно убедиться, что регулярное выражение может найти перекрывающиеся области и, таким образом, использовать утверждение lookahead. Проблема в том, что когда я пытаюсь показать позицию совпадения, python не возвращает ожидаемые значения. Я подозреваю, что это потому, что? = Это утверждение с нулевой шириной. Как мне обойти это?Поиск позиции соответствия с утверждениями с нулевой шириной
0
A
ответ
0
Ваш шаблон соответствует строке нулевой длины непосредственно перед ATG
. Затем вы должны захватить одну группу, но группу, которая не способствует вашей встрече, поэтому вы, вероятно, получите -1
для своих match.start
и match.end
. См. http://docs.python.org/2/library/re.html#re.MatchObject.end
finditer() предназначен специально для совпадений с совпадением, поэтому вам придется выбирать между использованием finditer() и start() и end(). См. http://docs.python.org/2/library/re.html#re.finditer
Я не знаю достаточно, чтобы рекомендовать элегантную замену finditer().
0
Возьмите хорошую группу ....
Я надеюсь, что я угадал, что вы хотите.
import re
def orfs(sequence, aa):
rframe = []
orf_re = ('(?='
'('
'ATG(?:[ATGC]{3}){%d,}?'
'(?:TAG|TAA|TGA)'
')'
')' \
% (aa))
for match in re.finditer(orf_re, sequence):
print 'groups()',repr(match.groups()),match.span()
print 'group(0)',repr(match.group(0)),match.span(0)
print 'group(1)',repr(match.group(1)),match.span(1)
print
rframe.append('span (%d , %d)\n'
'stop codon %s\n'
'nucleotide length %d\n'
'amino acid length %d\n'
'reading frame %d\n'
%
(match.start(1),match.end(1),
sequence[match.end(1)-3:match.end(1)],
match.end(1) - match.start(1),
(match.end(1) - match.start(1) - 3)/3,
match.start() % 3))
return rframe
s = ('AGCTGCTG',
'ATG',
'GGG' 'GGG' 'GGG' 'GGG' 'GGG' 'GGG',
'TA',
'A', # overlaping
'TG',
'CCC' 'CCC' 'CCC' 'CCC' 'CCC',
'TAG',
'TTTGTCTAG')
print '\n'.join(s)
print '==================='
s = ''.join(s)
print '\n'.join(orfs(s,3))
результат
AGCTGCTG
ATG
GGGGGGGGGGGGGGGGGG
TA
A
TG
CCCCCCCCCCCCCCC
TAG
TTTGTCTAG
===================
groups() ('ATGGGGGGGGGGGGGGGGGGGTAA',) (8, 8)
group(0) '' (8, 8)
group(1) 'ATGGGGGGGGGGGGGGGGGGGTAA' (8, 32)
groups() ('ATGCCCCCCCCCCCCCCCTAG',) (31, 31)
group(0) '' (31, 31)
group(1) 'ATGCCCCCCCCCCCCCCCTAG' (31, 52)
span (8 , 32)
stop codon TAA
nucleotide length 24
amino acid length 7
reading frame 2
span (31 , 52)
stop codon TAG
nucleotide length 21
amino acid length 6
reading frame 1
Смежные вопросы
- 1. токен с нулевой шириной?
- 2. Столбец с нулевой шириной
- 3. Цепочные частичные функции с утверждениями соответствия
- 4. Водосточные системы с нулевой шириной
- 5. Каковы элементы с нулевой шириной в регулярном выражении?
- 6. Поиск соответствия строки с getline
- 7. Упругий поиск соответствия с фильтром
- 8. BASS_MIDI_StreamEvent в нулевой позиции
- 9. Stumped on Regex с положительным утверждением lookbehind с нулевой шириной
- 10. Разбор регулярного выражения с нулевой шириной с регулярным выражением
- 11. Найти строку соответствия позиции?
- 12. Удаление нулевой нулевой позиции в SSIS
- 13. Почему не работает регулярное выражение с нулевой шириной?
- 14. Невозможно заменить пространство пространством с нулевой шириной, используя RegExp
- 15. JQuery, обрабатывающий объекты с нулевой шириной и высотой как невидимые
- 16. конфликт при использовании пространства с нулевой шириной и execCommand («copy»)
- 17. Как работают отрицательные утверждения с нулевой шириной в R?
- 18. Представить пространство с нулевой шириной как константу строки
- 19. Создать html кнопку/метку с текстом и нулевой начальной шириной
- 20. C++ Макросы с несколькими утверждениями
- 21. Ошибка с утверждениями try-catch
- 22. нг-INIT с утверждениями состояния
- 23. Сочетание с утверждениями в prodedure
- 24. Java - программирование с утверждениями вопросы
- 25. JavaScript `if` с несколькими утверждениями
- 26. Проблемы с утверждениями If Else
- 27. Ошибка синтаксиса с утверждениями Elif
- 28. Eclipse: Поиск с точной строкой соответствия
- 29. поиск DN с использованием соответствия подстроки
- 30. Эластичный поиск - фраза соответствия с использованием Java
Я написал вывод, как, что для того, чтобы непосредственно напечатать его в шахматном порядке на последовательных линиях. Если вы хотите получить свой результат, ничего проще, чем добавлять символы '' 1'' в нужные места в коде, не так ли? – eyquem
Есть ли способ убедиться, что это возвращает только самые длинные последовательности? например ATGATGAAATAA должен возвращать только целые последовательности и не должен возвращать ATGAAATAA. –
«Самая длинная последовательность», вы имеете в виду последовательности с максимально возможными повторениями ATG впереди? То есть новое условие. – eyquem