2017-08-01 2 views
-1

J'ai un fichier GFF nommé comme 50267.gff ​​comme suitComment puis-je obtenir du contenu entre crochets en utilisant une expression régulière?

#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 
... 

Je veux obtenir le contenu entre parenthèses et faire nouveau fichier nommé comme 50267.fa comme suit

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

import re. Vous pouvez utiliser globalement la regex suivante: \ [(. *?) \] –

+1

Ce ne sont pas des parenthèses, ce sont des crochets. – Barmar

+0

@HariomSingh crochets doivent être échappés – Barmar

Répondre

0

vous pouvez utiliser \[(.*?)\] ou \[([^\]]+)

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

merci pour votre aide! J'ai une question! que signifie? – tehoo

0

Vous devez échapper crochets dans une expression régulière. Ensuite, vous pouvez utiliser un groupe de capture pour obtenir ce qu'il y a dedans.

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