【Rosalind】Finding a Protein Motif – 正则表达式的使用

Rosalind习题Finding a Protein Motif

先祝大家中秋和国庆双节快乐!
在这个日历我还在努力地学习代码(指只有晚上写了2h白天都在睡觉)zzzz
最近在做Rosalind上的这道习题,其中用到了Python中的正则表达式,也就是调用了re模块。之前在学perl(没有学会的那种学)的时候接触过正则表达式,但是自己用的并不是很多,这次正好找到个机会使用一下,还不是很熟练。

Problem

To allow for the presence of its varying forms, a protein motif is represented by a shorthand as follows: [XY] means "either X or Y" and {X} means "any amino acid except X." For example, the N-glycosylation motif is written as N{P}[ST]{P}.

You can see the complete description and features of a particular protein by its access ID "uniprot_id" in the UniProt database, by inserting the ID number into

http://www.uniprot.org/uniprot/uniprot_id

Alternatively, you can obtain a protein sequence in FASTA format by following

http://www.uniprot.org/uniprot/uniprot_id.fasta

For example, the data for protein B5ZC00 can be found at http://www.uniprot.org/uniprot/B5ZC00.

Given: At most 15 UniProt Protein Database access IDs.

Return: For each protein possessing the N-glycosylation motif, output its given access ID followed by a list of locations in the protein string where the motif can be found.

Sample Dataset
A2Z669
B5ZC00
P07204_TRBM_HUMAN
P20840_SAG1_YEAST
Sample Output
B5ZC00
85 118 142 306 395
P07204_TRBM_HUMAN
47 115 116 382 409
P20840_SAG1_YEAST
79 109 135 248 306 348 364 402 485 501 614

我的解法

输出

我用的测试文件内容是:
P02748_CO9_HUMAN
P01217_GLHA_BOVIN
Q7TMB8
Q924A4
Q28409
P10643_CO7_HUMAN
P05783_K1CR_HUMAN
A6LJ74
P80195_MPP3_BOVIN
P01045_KNH2_BOVIN
P01044_KNH1_BOVIN
P13838_LEUK_RAT
P40225_TPO_HUMAN

我的输出:

下载信息去掉不看就是想要的答案,时间是sublime text3计算出来的,这个应该是包含了下载文件的时间(挣扎XD)
我的代码最主要的内容就是在find_motif()函数里。

大佬的答案

但是我看了看讨论区的答案,原来大佬只用了20行就解决了我差不多80行的事情。在这里也贴一个大佬的代码学习一下:(来源rosalind用户hascool

世界著名的程序员Jamie Zawinski曾经说过(我好像也没调查过他是不是真的说过XD):

“有些人面临一个问题时会想:‘我知道,可以用正则表达式来解决这个问题。’于是现在他们就有两个问题了”——Jamie Zawinski

btw正则表达式其实是在生物信息学中应用很广的一个方法,感觉之后应该多多熟悉正则表达式的使用,对于序列这种特定文本的匹配非常有帮助。之后慢慢整理一下,也想写一个正则表达式学习的归纳整理,先把flag立在这,之后一定还会回来~

Share this page if you like this post:)