我有以下一串氨基酸:
s = 'SHVANSGYMGMTPRLGLESLLE*A*MIRVAS'
其中*
表示终止密码子。
我想提取满足以下条件的所有肽(氨基酸链,即子串):
M
*
如果我在Python中使用该特定字符串中的正则表达式M.*?\*
,它将返回一个肽:
MGMTPRLGLESLLE*
这只是部分正确,因为它忽略了另一种可能的解决方案:
MTPRLGLESLLE*
换句话说,我需要一个返回两个肽的正则表达式:
MGMTPRLGLESLLE*
和
MTPRLGLESLLE*
有什么想法吗?
答案 0 :(得分:0)
(?=(M.*?\*))
使用它。它使用正向前瞻来检查字符串。因为它是一个0宽度的断言,它可以匹配所有字符串。
您可以像以下一样使用它:
print re.findall(r"(?=(M.*?\*))",x)
答案 1 :(得分:0)
包're'似乎不支持重叠匹配(这就是为什么findall
或finditer
找不到您想要的两个匹配项的原因)。
然而,有一个名为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