1

希望有人可以提供帮助,我正在尝试使用正则表达式从出现在模式之后的字符串中提取某些内容,但它不起作用,我不知道为什么。正则表达式在 linux 中运行良好...

import re
s = "GeneID:5408878;gbkey=CDS;product=carboxynorspermidinedecarboxylase;protein_id=YP_001405731.1"
>>> x = re.search(r'(?<=protein_id=)[^;]*',s)
>>> print(x)
<_sre.SRE_Match object at 0x000000000345B7E8>
4

2 回答 2

8

在搜索结果上使用.group()以打印捕获的组:

>>> print(x.group(0))
YP_001405731.1

正如 Martijn指出的,您创建了一个匹配对象。正则表达式是正确的。如果它是错误的,print(x)会打印None.

于 2013-07-07T12:15:05.713 回答
4

您可能应该考虑重新编写您的正则表达式,以便找到所有对,这样您就不必乱搞特定组和硬编码的外观......

import re
kv = dict(re.findall('(\w+)=([^;]+)', s))
# {'gbkey': 'CDS', 'product': 'carboxynorspermidinedecarboxylase', 'protein_id': 'YP_001405731.1'}
print kv['protein_id']
# YP_001405731.1
于 2013-07-07T12:25:22.213 回答