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

基于MATLAB正则表达式筛选nii文件的技术求助

MATLAB正则筛选特定nii文件方案

步骤1:获取目录下所有相关文件

先把目录里所有带.nii的文件都取出来,避免漏掉末尾带数字的文件:

allNiiFiles = dir('*.nii*');
allFilenames = {allNiiFiles.name}; % 转成元胞数组方便后续处理

步骤2:编写正则匹配结构

针对你要的文件模式,写精准的正则表达式,确保文件名完全符合ica_sub+3位数字+_component_ica_s+1位数字+.nii+末尾数字的结构:

pattern = '^ica_sub\d{3}_component_ica_s\d\.nii(\d{1,2})$';

正则各部分解释:

  • ^:强制从文件名开头匹配,避免中间包含该模式的文件被误选
  • ica_sub:匹配固定前缀
  • \d{3}:匹配恰好3位数字
  • _component_ica_s:匹配固定中间段
  • \d:匹配1位数字
  • \.nii:匹配.nii(.在正则里是通配符,必须加\转义才能匹配实际的点)
  • (\d{1,2}):匹配1或2位数字(对应末尾1-20的数字),括号是捕获组方便后续提取
  • $:强制匹配到文件名结尾,避免后续多余字符的文件被误选

步骤3:筛选结构符合的文件

用regexp和cellfun快速筛选出结构匹配的文件名:

matchedIndices = ~cellfun(@isempty, regexp(allFilenames, pattern));
matchedFilenames = allFilenames(matchedIndices);

步骤4:过滤末尾数字1-20的文件

因为正则没法直接精准匹配1-20的数字范围,所以单独循环判断:

validFiles = {};
for idx = 1:length(matchedFilenames)
    % 提取末尾的数字字符串并转成数值
    endNum = str2double(regexp(matchedFilenames{idx}, '\d{1,2}$', 'match'));
    if endNum >= 1 && endNum <= 20
        validFiles{end+1} = matchedFilenames{idx};
    end
end

最后validFiles就是你要的符合所有条件的元胞数组,直接用就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:00:31