我是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=((?:\([^\)]+\))*) \\Processed=((?:\([^\)]+\))*) ([\s\S]*?)(?:\n*>|$)
这个正则表达式将捕获你的氨基酸序列。在结束“已处理”数据字段之后,它捕获跨行的所有字符,直到它到达紧跟
>
字符的换行符,或者一行的结尾。这应该适合您的python代码。你知道吗Regex demo
一个示例代码看起来像这样;它将匹配尽可能多的氨基酸字符串,然后将它们打印出来。你知道吗
输出:
Python demo
一般来说,有3种方法可以像这样解析数据:
Here's a really fantastic answer on SO about using regex and parsers.
他们都很烦躁。但是字符串方法很容易调试,正则表达式和解析器。。。不是。所以我的第一步是尝试用字符串方法解包数据,可能是这样的:
这将产生一个数据字典:
这感觉更容易挥舞。你知道吗
现在我们可以继续寻找这个字符序列,也许这并不难,我们可以考虑使用regex而不必头痛,例如:
这将提供:
相关问题 更多 >
编程相关推荐