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

2024-03-29 05:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

基因表:F59A7.7T25D3.3F13B12.4cysl-1cysl-2cysl-3cysl-4F01D4.8

我试过:基因列表:((((\w+)(\w+);)+*但它只捕获最后一个基因


Tags: 字符串列表基因cysl
3条回答

您可以使用以下选项:

\s([^;\s]+)

Demo

  • 捕获的组([^;\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;]+

然而,首先使用substring只获取你需要的部分(基因,不包括GENELIST)

演示:regex demo

给出:

>>> 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;]+)

Demo

或者,在Python中:

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

相关问题 更多 >