python - 使用正则表达式获取所需行的问题

标签 python regex

我是 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 代码。

Regex demo

示例代码如下所示;它将匹配尽可能多的氨基酸字符串,然后将它们打印出来。

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 demo

关于python - 使用正则表达式获取所需行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341825/

相关文章:

regex - MongoDB/PyMongo : how to 'escape' parameters in regex search?

python - 检查 python 中的 Json 数据是否为 ​​none

python - 如何在Python中基于gram-matrix实现从距离矩阵中查找点的坐标?

python - SSL 证书验证在 python mqtt 连接上失败

python - 如何在 Mac 上安装 PyQt5?

java - 正则表达式 以标点符号(句号)结尾的句子中的最后一个单词

java正则表达式匹配0-9和一些特殊字符

c# - 正则表达式 - 比赛后只允许有空格或什么都没有

python - 统一码编码错误 : 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)?

regex - 与信用卡的3或4位数简历相匹配的正则表达式