从一串氨基酸中提取所有可能的肽

时间:2014-09-15 09:39:13

标签: python regex string

我有以下一串氨基酸:

s = 'SHVANSGYMGMTPRLGLESLLE*A*MIRVAS'

其中*表示终止密码子。

我想提取满足以下条件的所有肽(氨基酸链,即子串):

  1. 链以氨基酸M
  2. 开始
  3. 链以*
  4. 结尾

    如果我在Python中使用该特定字符串中的正则表达式M.*?\*,它将返回一个肽:

    MGMTPRLGLESLLE*
    

    这只是部分正确,因为它忽略了另一种可能的解决方案:

    MTPRLGLESLLE*
    

    换句话说,我需要一个返回两个肽的正则表达式:

    MGMTPRLGLESLLE*
    

    MTPRLGLESLLE*
    

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

(?=(M.*?\*))

使用它。它使用正向前瞻来检查字符串。因为它是一个0宽度的断言,它可以匹配所有字符串。

您可以像以下一样使用它:

print re.findall(r"(?=(M.*?\*))",x)

请参阅演示http://regex101.com/r/jT3pG3/5

答案 1 :(得分:0)

包're'似乎不支持重叠匹配(这就是为什么findallfinditer找不到您想要的两个匹配项的原因)。

然而,有一个名为regex的新Python包似乎解决了这个问题:https://pypi.python.org/pypi/regex。您可以使用以下两个命令之一安装它:

pip install regex 
easy_install regex 

导入包regex而不是re,以下脚本可以执行您想要的操作:

#!/usr/bin/python
import regex as re
s = "SHVANSGYMGMTPRLGLESLLE*A*MIRVAS"
matches = re.findall(r'M.*?\*', s, overlapped=True)
for match in matches: print match