首页 > 解决方案 > Python 正则表达式:每个字符串的多个正则表达式相互排斥,例如在单元格分析器中?

问题描述

是否可以重新创建正则表达式捕获,因为它在带有 python 的 cellprofiler 中工作?这样我就可以一起编译多个正则表达式,而第一个将捕获字符串的一部分,将此捕获存储在一个变量中,下一个在前一个之后开始并寻找另一个模式等?我想为用户数据 ID 的格式创建一个用户输入,这似乎比我知道如何用正则表达式正常解决它要容易得多。

因此,在 cellprofiler 中,字符串 't10_F0010_GFP_D2.tif' 上使用的以下表达式将给出:

string='t10_F0010_GFP_D2.tif'
pattern=t(?P<Timepoint>[0-9]+)_F(?P<Site>[0-9]{4})_(?P<Channel>.*)_(?P<Well>[A-Z][0-9]).tif

Output:
Timepoint=10
Site=0010
Channel=GFP
Well=D2

因此该模式将转换为:从一个“t”开始,捕获一个或多个后续数字作为“时间点”,需要后面跟着“ F”,然后捕获四个数字 [0-9] 作为“站点”,需要后跟 ' ',捕获之后的任何内容,直到下一个 '_' 作为 'Channel',捕获一个字母后跟一个数字作为 'Well',需要在 .tif 中。

这可以以某种方式在python中重现吗?

标签: pythonregex

解决方案


你可以re.match()使用groupdict()

前任:

import re

string='t10_F0010_GFP_D2.tif'
pattern=re.compile("t(?P<Timepoint>[0-9]+)_F(?P<Site>[0-9]{4})_(?P<Channel>.*)_(?P<Well>[A-Z][0-9]).tif")
for k, v in pattern.match(string).groupdict().items(): # --> {'Well': 'D2', 'Site': '0010', 'Channel': 'GFP', 'Timepoint': '10'}
    print("{}={}".format(k, v))

输出:

Well=D2
Site=0010
Channel=GFP
Timepoint=10

推荐阅读