2017-01-02 4 views
2

나는 FASTA 형식의 DNA 서열에서 여러 개의 특정 서열을 찾은 다음 인쇄하려고합니다. 간단하게하기 위해 짧은 문자열 시퀀스를 만들어 문제를 보여 줬습니다.FASTA 형식의 서열 검색

import re 
seq = "QPPLSK" 
find_in_seq = re.search(r"[^P](P|K|R|H|W)", seq) 
print find_in_seq.string[find_in_seq.start():find_in_seq.end()] 

"QP"와 "SK"가 2 개 일치하는 경우에만 "QP"가 출력됩니다. 첫 번째 경기를 보여주는 대신 2 경기를 표시하려면 어떻게해야합니까?

감사

답변

0

사용 re.findall 더 이상 캡처 그룹이 있도록 정규식을 변경 - [^P](?:P|K|R|H|W) 또는 [^P][PKRHW] :

import re 
seq = "QPPLSK" 
find_in_seq = re.findall(r"[^P][PKRHW]", str(seq)) 
print(find_in_seq) 

Python demo

참고를 참조하십시오 당신은 어느 것과도 일치 할 경우 P 이외의 문자 인 경우 [A-OQ-Z]을 사용하는 것이 좋습니다.

+0

고맙지 만 FASTA 형식에서 동일한 방법을 시도 할 때 그 방법이 작동하지 않습니다. – thenoob

+0

'seq'이 문자열이면 작동합니다. 'str (seq)'를 입력으로 전달해보십시오. –

+0

예 시퀀스 (sequence) 대신에 [('A', 'S', 'T', 'Q'), ('F', 'W', 'J', 'M' . 첫 번째로 일치하는 시퀀스는 표시되지 않습니다. str을 사용하여 문자열로 구문 분석하더라도 문자열이라고 생각하지 않습니다. 문자열이 아니면 re.search도 작동하지 않습니다. – thenoob