Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式获取所需行的问题_Python_Regex - Fatal编程技术网

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

Python 使用正则表达式获取所需行的问题,python,regex,Python,Regex,我是python中正则表达式函数的新手。我有一个文件需要过滤氨基酸序列。以下是对该文件的快速查看: >nxp:NX_A0A0A6YYD4-1\PName=T细胞受体β变量13异构体Iso 1\GName=TRBV13\NcbiTaxId=9606\TaxName=Homo Sapiens\Length=124 \SV=5\EV=31\PE=3\ModResPsi=(52 | MOD:00798 |一半 胱氨酸)(120 | MOD:00798 |半胱氨酸)\ModRes=(106 | | N-连

我是python中正则表达式函数的新手。我有一个文件需要过滤氨基酸序列。以下是对该文件的快速查看:

>nxp:NX_A0A0A6YYD4-1\PName=T细胞受体β变量13异构体Iso 1\GName=TRBV13\NcbiTaxId=9606\TaxName=Homo Sapiens\Length=124 \SV=5\EV=31\PE=3\ModResPsi=(52 | MOD:00798 |一半 胱氨酸)(120 | MOD:00798 |半胱氨酸)\ModRes=(106 | | N-连接 (GlcNAc…)天冬酰胺)\VariantSimple=(18 | H)(27 | V) \已处理=(1 | 31 | PEFF:0001021 |信号 肽)(32 | 124 | PEFF:0001020 |成熟蛋白) MLSPDLPDSAWNTRRLLCRVMLCLLGAGSVAGVIQSPRHLIKEKTRETLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL

>nxp:NX_A0A1B0GV90-1\PName=Cortexin结构域,包含2个异构体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) \加工=(1 | 55 | PEFF:0001020 |成熟蛋白质) MEDSLSSGVDKGFAIAFVLLFLIVLFCALVKNPYKASSTTTEPSLS

我可以过滤出所需点的端点和起点。正如您在我的代码中所看到的,开始在\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)

通常有3种方法可以解析如下数据:

d = data.split('\\')

nxp, items, this_item = None, {}, {}

for item in d:

    if 'nxp' in item:
        if nxp:
            items[nxp] = this_item
            this_item = {}
        nxp = item.strip().split(':')[-1]
        continue

    if '=' in item:
        key, value = item.strip().split('=')
        this_item[key] = value

else:
    items[nxp] = this_item
  • 使用方法
  • 使用正则表达式,例如与
  • 使用解析器,例如

他们都很烦躁。但是字符串方法很容易调试,正则表达式和解析器。。。不是。因此,我的第一步是尝试使用字符串方法解包数据,可能如下所示:

d = data.split('\\')

nxp, items, this_item = None, {}, {}

for item in d:

    if 'nxp' in item:
        if nxp:
            items[nxp] = this_item
            this_item = {}
        nxp = item.strip().split(':')[-1]
        continue

    if '=' in item:
        key, value = item.strip().split('=')
        this_item[key] = value

else:
    items[nxp] = this_item
这将生成一个数据字典:

{'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'},
 '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'}}
这感觉更容易挥舞

现在,我们可以按照这个字符序列进行操作,也许这并不难,我们可以考虑使用正则表达式而不会感到头痛,例如:

import re
re.search(r'\) ([ A-Z]+)', items['NX_A0A0A6YYD4-1']['Processed']).groups()[0]
这使得:

'MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL'

通常有3种方法可以解析如下数据:

d = data.split('\\')

nxp, items, this_item = None, {}, {}

for item in d:

    if 'nxp' in item:
        if nxp:
            items[nxp] = this_item
            this_item = {}
        nxp = item.strip().split(':')[-1]
        continue

    if '=' in item:
        key, value = item.strip().split('=')
        this_item[key] = value

else:
    items[nxp] = this_item
  • 使用方法
  • 使用正则表达式,例如与
  • 使用解析器,例如

他们都很烦躁。但是字符串方法很容易调试,正则表达式和解析器。。。不是。因此,我的第一步是尝试使用字符串方法解包数据,可能如下所示:

d = data.split('\\')

nxp, items, this_item = None, {}, {}

for item in d:

    if 'nxp' in item:
        if nxp:
            items[nxp] = this_item
            this_item = {}
        nxp = item.strip().split(':')[-1]
        continue

    if '=' in item:
        key, value = item.strip().split('=')
        this_item[key] = value

else:
    items[nxp] = this_item
这将生成一个数据字典:

{'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'},
 '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'}}
这感觉更容易挥舞

现在,我们可以按照这个字符序列进行操作,也许这并不难,我们可以考虑使用正则表达式而不会感到头痛,例如:

import re
re.search(r'\) ([ A-Z]+)', items['NX_A0A0A6YYD4-1']['Processed']).groups()[0]
这使得:

'MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL'
\\VariantSimple=(((?:\([^\)]+\)*)\\Processed=((?:\([^\)]+\)*)([\s\s]*?)(?:\n*>|$)

这个正则表达式将捕获你的氨基酸序列。在结束“已处理”数据字段后,它捕获跨行的所有字符,直到换行符后跟
字符或行尾。这应该适用于您的python代码

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

重新导入
以open('data.txt','r')作为fil:
数据=fil.read()
rex=re.compile(“\\\VariantSimple=(?:\([^\)]+\)*\\\Processed=(?:\([^\)]+\)*([\s\s]*?)(?:\n*>|$))
rex2=重新编译(“变量”)
out=re.findall(rex,数据)
对于mtch输入输出:
打印(mtch+“\n”)
输出:

MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL

MEDSSLSSGVDVDKGFAIAFVVLLFLFLIVMIFRCAKLVKNPYKASSTTTEPSLS
\\VariantSimple=(((?:\([^\)]+\)*)\\Processed=((?:\([^\)]+\)*)([\s\s]*?)(?:\n*>|$)

这个正则表达式将捕获你的氨基酸序列。在结束“已处理”数据字段后,它捕获跨行的所有字符,直到换行符后跟
字符或行尾。这应该适用于您的python代码

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

重新导入
以open('data.txt','r')作为fil:
数据=fil.read()
rex=re.compile(“\\\VariantSimple=(?:\([^\)]+\)*\\\Processed=(?:\([^\)]+\)*([\s\s]*?)(?:\n*>|$))
rex2=重新编译(“变量”)
out=re.findall(rex,数据)
对于mtch输入输出:
打印(mtch+“\n”)
输出:

MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL

MEDSSLSSGVDVDKGFAIAFVVLLFLFLIVMIFRCAKLVKNPYKASSTTTEPSLS

首先,你应该能够匹配你真正想要的东西。。。或者你需要第一场比赛的其他东西吗?如果你能在最后展示出你想要的东西,那会有很大帮助。它只是大写字符的长字符串吗?在这种情况下,我需要序列mlspdlpdsawntrllcrvmlcllgagsvagvqqsprhlikretatlkcpyprhdt vywyqqgpgqdpqflisfyekmqsdkgsipdrfsqfsqfsdyhselnmssleggdsalyfc,假设您已经尝试过查找是否有一个库来解析和获取该文件类型的信息。它似乎与基因组学有关。是的,我在蛋白质组学领域的项目需要它。遗憾的是,我不知道有任何软件包和函数解析这个序列。我想这是一个简单的fasta文件,包含一个头和氨基酸序列?看看biopython软件包,你会发现很多处理这些文件的有用方法。你应该能够首先匹配你真正想要的东西。。。或者你需要第一场比赛的其他东西吗?如果你能在最后展示出你想要的东西,那会有很大帮助。它只是大写字符的长字符串吗?在这种情况下,我需要序列mlspdlpdsawntrllcrvmlcllgagsvagvqqsprhlikretatlkcpyprhdt vywyqqgpgqdpqflisfyekmqsdkgsipdrfsqfsqfsdyhselnmssleggdsalyfc,假设您已经尝试过查找是否有一个库来解析和获取该文件类型的信息。它似乎与基因组学有关。是的,我在蛋白质组学领域的项目需要它。遗憾的是,我不知道有任何软件包和函数解析这个序列。我想这是一个简单的fasta文件,包含一个头和氨基酸序列?看看biopython软件包,你会发现很多有用的方法来处理这些文件。@menbar不要放弃