使用正则表达式匹配字符串的一部分?(python)



我可以使用什么正则表达式来匹配基因列表字符串中的基因(粗体(:

GENE_LIST:F59A7.7T25D3.3F13B12.4cysl-1cysl-2cysl-3cysl-4F01D4.8

我尝试过:GENE_List:(((\w+(。(\w+(((+*,但它只捕获最后一个基因

给定:

>>> s="GENE_LIST: F59A7.7; T25D3.3; F13B12.4; cysl-1; cysl-2; cysl-3; cysl-4; F01D4.8"

你可以使用Python字符串方法来做:

>>> s.split(': ')[1].split('; ')
['F59A7.7', 'T25D3.3', 'F13B12.4', 'cysl-1', 'cysl-2', 'cysl-3', 'cysl-4', 'F01D4.8']

对于正则表达式:

(?<=[:;]s)([^s;]+)

演示

或者,在Python中:

>>> re.findall(r'(?<=[:;]s)([^s;]+)', s)
['F59A7.7', 'T25D3.3', 'F13B12.4', 'cysl-1', 'cysl-2', 'cysl-3', 'cysl-4', 'F01D4.8']

您可以使用以下内容:

s([^;s]+)

演示

  • 捕获的组([^;s]+)将包含所需的子字符串,后跟空白(s(

>>> s = 'GENE_LIST: F59A7.7; T25D3.3; F13B12.4; cysl-1; cysl-2; cysl-3; cysl-4; F01D4.8'
>>> re.findall(r's([^;s]+)', s)
['F59A7.7', 'T25D3.3', 'F13B12.4', 'cysl-1', 'cysl-2', 'cysl-3', 'cysl-4', 'F01D4.8']

更新

事实上要简单得多:

[^s;]+

但是,首先使用子字符串只获取您需要的部分(基因,没有GENELIST(

demo:regex演示

string = "GENE_LIST: F59A7.7; T25D3.3; F13B12.4; cysl-1; cysl-2; cysl-3; cysl-4; F01D4.8"
re.findall(r"([^;s]+)(?:;|$)", string)

输出为:

['F59A7.7',
'T25D3.3',
'F13B12.4',
'cysl-1',
'cysl-2',
'cysl-3',
'cysl-4',
'F01D4.8']

最新更新