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

2024-04-29 11:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下一连串的氨基酸:

s = 'SHVANSGYMGMTPRLGLESLLE*A*MIRVAS'

其中*表示终止密码子。你知道吗

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

  1. 链从氨基酸开始M
  2. 链以*结束

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

MGMTPRLGLESLLE*

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

MTPRLGLESLLE*

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

MGMTPRLGLESLLE*

以及

MTPRLGLESLLE*

有什么想法吗?你知道吗


Tags: 字符串解决方案条件密码子一连串mirvasshvansgymgmtprlglesllemgmtprlgleslle
2条回答
(?=(M.*?\*))

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

你可以像这样使用它:

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

请参见演示http://regex101.com/r/jT3pG3/5。你知道吗

包'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

相关问题 更多 >