我是 python 正则表达式函数的新手。我有一个文件需要过滤氨基酸序列。以下是对该文件的快速浏览:
>nxp:NX_A0A0A6YYD4-1 \PName=T cell receptor beta variable 13 isoform Iso 1 \GName=TRBV13 \NcbiTaxId=9606 \TaxName=Homo Sapiens \Length=124 \SV=5 \EV=31 \PE=3 \ModResPsi=(52|MOD:00798|half cystine)(120|MOD:00798|half cystine) \ModRes=(106||N-linked (GlcNAc...) asparagine) \VariantSimple=(18|H)(27|V) \Processed=(1|31|PEFF:0001021|signal peptide)(32|124|PEFF:0001020|mature protein) MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL
>nxp:NX_A0A1B0GV90-1 \PName=Cortexin domain containing 2 isoform Iso 1 \GName=CTXND2 \NcbiTaxId=9606 \TaxName=Homo Sapiens \Length=55 \SV=1 \EV=11 \PE=3 \VariantSimple=(13|N)(22|F)(29|T)(34|Q)(45|T) \Processed=(1|55|PEFF:0001020|mature protein) MEDSSLSSGVDVDKGFAIAFVVLLFLFLIVMIFRCAKLVKNPYKASSTTTEPSLS
我可以过滤掉所需点的端点和起点。正如您在我的代码中看到的,开头是\VarableSimple 之后的坐标,结尾应该是下一个 ">"字符。现在我找不到过滤 MLSPDLPD..... 序列的方法。有人可以给我一个主意吗?
with open('PATH/XYZ', 'r') as f:
data = f.read()
import regex
h = regex.compile("(.*)\n").match(data)
header = h.group(1)
start = regex.match(".+\\\VariantSimple=(\([^)]+\))*\s{0,1}", data)
start.captures(1)
end = regex.compile("(.)*\>").match(data)
end.captures(0)
最佳答案
\\VariantSimple=((?:\([^\)]+\))*)\\已处理=((?:\([^\)]+\))*) ([\s\S]*?)(?:\n*>|$)
此正则表达式将捕获您的氨基酸序列。关闭“已处理”数据字段后,它会捕获跨行的所有字符,直到遇到换行符后跟 >
字符或行尾。这应该适用于您的 python 代码。
示例代码如下所示;它将匹配尽可能多的氨基酸字符串,然后将它们打印出来。
import re
with open('data.txt', 'r') as fil:
data = fil.read()
rex = re.compile("\\\VariantSimple=(?:\([^\)]+\))* \\\Processed=(?:\([^\)]+\))* ([\s\S]*?)(?:\n*>|$)")
rex2 = re.compile("Variant")
out = re.findall(rex, data)
for mtch in out:
print(mtch + "\n")
输出:
MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL
MEDSSLSSGVDVDKGFAIAFVVLLFLFLIVMIFRCAKLVKNPYKASSTTTEPSLS
关于python - 使用正则表达式获取所需行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341825/