DNA 시퀀스의 오픈 리딩 프레임을 찾을 스크립트를 작성하려고합니다. 그러나, 나는 정규식이 중복 영역을 찾을 수 있는지 확인해야하므로 lookahead 어설 션을 사용해야합니다. 문제는 경기의 위치를 표시하려고 할 때 Python이 예상 값을 반환하지 않는다는 것입니다. 이것은? =가 너비가 아닌 어설 션이기 때문에 이것이라고 생각됩니다. 이 문제를 어떻게 해결해야합니까?너비가 0 인 어설 션과 일치하는 위치 찾기
0
A
답변
0
귀하의 패턴은 ATG
직전에 길이가 0 인 문자열과 일치합니다. 그런 다음 단일 그룹을 포착해야하지만 일치하는 항목에 포함되지 않는 그룹을 캡처해야하므로 match.start
및 match.end
에 대해 -1
이 표시됩니다. 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. 너비가 0 인 테이블 열
- 3. 다른 어설 션과 함께 예외 어설 션 jUnit
- 4. 너비가 0 인 긍정적 인 lookbehind 어설 션으로 정규 표현식에 문제가 발생했습니다
- 5. 너비가 100 % 인 절대 위치 지정
- 6. 어설 션과 라이브러리 API 유형 검사에 대한 예외 비교
- 7. 레일스 ActiveRecord 찾기 제품이 0 인 사용자
- 8. 정규식을 사용하여 버마어 문자의 너비가 0 인 공백을 삽입
- 9. 모든 브라우저에 대해 너비가 0 인 랩 포인트 만들기
- 10. 팽창 한 ImageView의 높이와 너비가 0 인 이유는 무엇입니까?
- 11. SQL에서 너비가 0 인 공백 문자를 삽입 할 수 없습니다.
- 12. 홀수 위치 인 가장 작은 양수 찾기
- 13. 일치하는 부분 문자열 찾기
- 14. 너비가 100 % 인 svg 삼각형
- 15. 일치하는 문자열 찾기 알고리즘
- 16. 정규식 일치하는 위치
- 17. 길이가 0 인 일치
- 18. 일치하는 문자열 목록 찾기
- 19. 일치하는 오류가없는 메서드 찾기
- 20. MOQ 어설 추상적 인 방법이
- 21. 너비가 100 % 인 링크 만들기
- 22. 너비가 100 % 인 여분의 픽셀
- 23. 너비가 % 인 div의 CSS 스프라이트?
- 24. 너비가 나는 패딩 4D 단위 (모두 0)
- 25. 일부 컴파일러 옵션 (어설 션과 같은)이 ON으로 설정된 경우 런타임에서 어떻게 감지합니까?
- 26. TLF 요소 위치 찾기
- 27. 지도 API - 반환 0 위도 및 경도에 따라 위치 찾기
- 28. 파이썬에서 길이가 0 인 파일의 파일 이름 찾기 및 인쇄
- 29. VLOOKUP 일치하는 쌍 찾기
- 30. 일치하는 항목을 병렬 목록으로 찾기
내가 직접 연속 선에 시차를 인쇄하기 위해 같은 출력을 썼다. 출력물을 원한다면''1'' 문자를 코드의 적절한 위치에 추가하는 것보다 쉬운 일은 아니겠습니까? – eyquem
이것이 가장 긴 시퀀스 만 반환하는지 확인하는 방법이 있습니까? 예 : ATGATGAAATAA는 전체 시퀀스 만 반환해야하며 ATGAAATAA를 반환하면 안됩니다. –
"가장 긴 서열"이란, 가능한 한 많이 앞에 ATG가 반복 된 서열을 의미합니까? 그것은 새로운 조건을 말합니다. – eyquem