更正python正则表达式以创建双dict



我有一个名为_x01_y01_000.h5或name_y01_x01_000.h5 的文件列表

创建以下列表的正确正则表达式(或其他方法)是什么:文件,x_ind,y_ind

到目前为止,我有这个代码:

name = 'S3_FullBrain_Mosaic_'
type = '.h5'
wildc = name + '*' + type
files = glob.glob(wildc)
files = np.asarray(files)
wildre = 'r"' +name+'x(?P<x_ind>d+)_y(?P<y_ind>d+).+"'
m = re.match(wildre,files)

由于glob已经确保了正确的文件名和扩展名,regex只需要匹配索引。CCD_ 1允许部分匹配。.groupdict创建了一个以命名组为关键字的字典。file密钥可以手动处理。

>>> file = 'S3_FullBrain_Mosaic_x02_y05_abcd.h5'
>>> result = re.search(r'x(?P<x_ind>d+)_y(?P<y_ind>d+)', file).groupdict()
>>> result
{'y_ind': '05', 'x_ind': '02'}
>>> result['file'] = file
>>> result
{'y_ind': '05', 'file': 'S3_FullBrain_Mosaic_x02_y05_abcd.h5', 'x_ind': '02'}

您可以对文件进行迭代以生成dict列表。为此,不需要创建numpy数组,因为我怀疑您是否会对files列表进行任何繁重的数值计算。

要处理这两种可能的格式,您需要使用两个正则表达式调用re.search。其中一个将返回None,另一个是可以使用groupdict的匹配项。

您可以使用re.findall

import re
names = ['name_x01_y01_000.h5', 'name_y01_x01_000.h5']
for name in names:
    matches = re.findall(r'_([xy])(d+)(?=_)', name)
    d = {k: int(v) for k, v in matches}
    d['name'] = name

最新更新