2017-08-01 70 views
-1

我有一個名爲50267.gff像GFF文件如下如何使用正則表達式在方括號內獲取內容?

#start gene g1 
dog1 
dog2 
dog3 
#protein sequence = [DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD] 
#end gene g1 
### 
#start gene g2 
cat1 
cat2 
cat3 
#protein sequence = [CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 
#CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC] 
#end gene g2 
### 
#start gene g3 
pig1 
pig2 
pig3 
... 

我想括號內獲得內容,並命名爲50267.fa像新的文件如下

>g1_50267 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
>g2_50267 
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCC 
... 
+0

導入重。您可以全局使用以下正則表達式: \ [(。*?)\] –

+1

這些不是括號,它們是方括號。 – Barmar

+0

@HariomSingh方括號必須被轉義 – Barmar

回答

0

可以使用\[(.*?)\]\[([^\]]+)

import re 

with open("50267.gff", "r") as ff: 
    matches = re.findall(r'\[([^\]]+)', ff.read()) 
    matches = ['>g' + str(ind+1) + "_50267\n" + x.replace('\n#', ' ') for ind, x in enumerate(matches)] 
    #print(matches) 
    with open('50267.fa', 'w') as fa: 
     fa.write("\n".join(matches)) 
+0

感謝您的幫助!我有個問題!這是什麼意思? – tehoo

0

你需要逃脫方括號中的正則表達式。然後,您可以使用捕獲組來獲取內容。

matches = re.findall(r'\[(.*?)\]', string) 
g = 1 
for match in matches: 
    print('>g' + g + '_50267'); 
    print match[0] 
    g += 1 
相關問題