BioPython:如何在Seq对象集合中搜索主题
我有一个来自BioPython的Seq对象列表,我想在这些序列中搜索一个氨基酸序列基序。搜索这些序列的最佳方法是什么?我的搜索是找到一个类似GxxxG的基序,但它可能更长或更短,但会在第一个G之后的下一个G的第一个实例处停止。使用正则表达式(如G.*G)将给出第一个G的结果,其中包含最后找到的G的任意数量的氨基酸BioPython:如何在Seq对象集合中搜索主题,python,regex,bioinformatics,biopython,Python,Regex,Bioinformatics,Biopython,我有一个来自BioPython的Seq对象列表,我想在这些序列中搜索一个氨基酸序列基序。搜索这些序列的最佳方法是什么?我的搜索是找到一个类似GxxxG的基序,但它可能更长或更短,但会在第一个G之后的下一个G的第一个实例处停止。使用正则表达式(如G.*G)将给出第一个G的结果,其中包含最后找到的G的任意数量的氨基酸 #Some example code from Bio.Seq import Seq from Bio.Alphabet import IUPAC import re records
#Some example code
from Bio.Seq import Seq
from Bio.Alphabet import IUPAC
import re
records = Seq("WALLLLFWLGWLGMLAGAVVIIVR", IUPAC.extended_protein)
search = re.search("F.*G", str(records))
print search.group()
# Want FWLG
# Get
FWLGWLGMLAG
你想要一个懒惰的对手
A.*B给定的abbbbe可以被视为试图匹配:
ABBBBBBBBBBBBBE
^-------------^
去“那不匹配”少试一个字母
ABBBBBBBBBBBBBE
^------------^
去“匹配”并返回它
惰性匹配A.*B
将尝试尽可能少地匹配。在这种情况下:
ABBBBBBBBBBBBBE
^^
A和0个字符,然后是B,类似于“这是一个匹配项”,只返回AB
??通常表示可选,但as*是量词(0或更多)?对它采取行动使它懒惰
你想要
F.*G
使用惰性量词是比较慢的方法。要在第一次出现G
时停止,可以使用否定字符类而不是点。例如:
F[^G]*G
[^G]
表示除G
然后你可以使用贪婪的量词
要了解速度增益,可以使用以下代码测试不同的模式:
import re
import cProfile
s = r'ACATCATCTATCTATACAATAAAAACTATCCCCTAACTACTACACTACTATCATCACATCATATCACTTTATATCCTAC'
for i in range(1,15):
s = s + s
s = r'F' + s
s = s + r'ATCTATCTATACAATAATCTATCTATACAATAATCTATCGATCTATCTATACAATAATCTATCTATACAATATCG' + s
cProfile.run('re.search(r"F[^G]+G",s)')
在你的例子中,如果在A和B之间需要至少有一个字符,该怎么办?因此,输出值至少应为A.B.@Kev,您可以将+用于1或更多。*是0还是更多?是1或0(可选),可以使用{5,}表示5次或更多次,或使用{5,7}表示5到7次。