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

时间:2016-08-11 18:11:06

标签: python regex

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

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

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

4 个答案:

答案 0 :(得分:1)

假设:

>>> 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']

答案 1 :(得分:1)

您可以使用以下内容:

\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']

答案 2 :(得分:0)

<强>更新

事实上它更简单:

[^\s;]+

然而,首先使用子串只取你需要的部分(基因,没有GENELIST)

演示:regex demo

答案 3 :(得分:0)

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']