基于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
相关产品推荐
相关产品推荐

