2017-07-19 52 views
-1

我在Python中的正则表达式有一些麻烦。我将如何去捕获这个字符串>后的所有内容?蟒蛇正则表达式与fasta标题

>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; release=r2.32; species=Homo; CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA

输出会是这样: 4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; release=r2.32; species=Homo; CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA

编辑:我希望用re.match或re.search

+0

试试'“(? <=\>)*“' – victor

回答

0

由于读取每个序列是多行(每FASTA标准),正则表达式不太可能成为这项工作的最佳工具。这是因为正则表达式模式通常意味着逐行处理文件以搜索特定模式,并且FASTA中的标题和序列行通常不共享这样的通用格式/模式。

你有没有试过寻找专门为提取FASTA记录而设计的工具? Biopython有专门用于处理FASTA/Q序列的module

0

你并不真的需要这个正则表达式。拆分字符串在“>”,并选择第二部分:

text = '>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; 
release=r2.32; species=Homo; 
CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG 
CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT 
TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT 
TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA' 

test = test.split('>')[1] 

print(test) 
0

要使用正则表达式来提取您需要(忽略理由)的信息:

import re 

text = '''>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; 
release=r2.32; species=Homo; 
CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG 
CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT 
TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT 
TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA''' 
# need . to match a new line. 
result = re.search("\>(.*)", text, flags=re.DOTALL) 
if result: 
    print(result.groups(1)) 

打印出以下几点:

('4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; \nrelease=r2.32; species=Homo;\nCCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG\nCAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT\nTAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT\nTGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA',) 

因此,也许你会再需要剥离出新行,也许像这样丑陋的东西:

result.groups(1)[0].replace("\n","")