You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式从images列表筛选与masks匹配的对应元素

需求描述

我有两个文件列表:

images = ['ND_row_id_4026.png',
          'ND_row_id_7693.png',
          'ND_row_id_5285.png',
          'ND_row_id_1045.png',
          'ND_row_id_2135.png',
          'ND_row_id_8155.png',
          'ND_row_id_3135.png']

masks = ['MA_row_id_4026.png',
         'MA_row_id_7693.png',
         'MA_row_id_5285.png',
         'MA_row_id_1045.png',
         'MA_row_id_2135.png']

需要保留masks列表中的所有文件,同时从images列表里筛选出和masks文件ID对应的图像文件(即保留ID一致的元素),最终得到和masks数量匹配的images子集:

images = ['ND_row_id_4026.png',
          'ND_row_id_7693.png',
          'ND_row_id_5285.png',
          'ND_row_id_1045.png',
          'ND_row_id_2135.png']

要求用正则表达式实现这个筛选。

实现方案

步骤1:提取masks中的唯一ID

先用正则从每个mask文件名中提取出ID数字,把这些ID存成集合,方便后续快速匹配:

import re

masks = ['MA_row_id_4026.png',
         'MA_row_id_7693.png',
         'MA_row_id_5285.png',
         'MA_row_id_1045.png',
         'MA_row_id_2135.png']

# 匹配mask文件名末尾的ID部分
mask_id_pattern = re.compile(r'_(\d+)\.png$')
mask_ids = set()
for mask in masks:
    match_result = mask_id_pattern.search(mask)
    if match_result:
        mask_ids.add(match_result.group(1))

步骤2:筛选images中对应ID的元素

再用正则匹配images中的文件名,提取ID后检查是否在已收集的mask ID集合里,符合条件的元素就保留:

images = ['ND_row_id_4026.png',
          'ND_row_id_7693.png',
          'ND_row_id_5285.png',
          'ND_row_id_1045.png',
          'ND_row_id_2135.png',
          'ND_row_id_8155.png',
          'ND_row_id_3135.png']

# 匹配image文件名末尾的ID部分
image_id_pattern = re.compile(r'_(\d+)\.png$')
filtered_images = []
for img in images:
    match_result = image_id_pattern.search(img)
    if match_result and match_result.group(1) in mask_ids:
        filtered_images.append(img)

print(filtered_images)

运行后输出结果即为目标列表:

['ND_row_id_4026.png', 'ND_row_id_7693.png', 'ND_row_id_5285.png', 'ND_row_id_1045.png', 'ND_row_id_2135.png']

正则表达式说明

  • 正则r'_(\d+)\.png$'的含义:
    • _:匹配文件名中的下划线
    • (\d+):捕获一个或多个连续数字(即我们需要的ID部分,括号用于分组提取)
    • \.png:匹配.png后缀(点号是正则特殊字符,需用反斜杠转义)
    • $:匹配字符串结尾,确保只匹配文件名末尾的ID,避免误匹配文件名中间的数字

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:30:57