MATLAB中如何筛选不包含"_B"字符串的文件?
问题分析与解决
你遇到的问题核心在于对Matlab contains 函数的使用逻辑理解有误,咱们一步步拆解修正:
错误原因拆解
contains不需要通配符:Matlab的contains是直接检测字符串中是否包含指定子串,你写的'*_B*.png'会被当成完整的带*的子串去匹配——而你的文件名里显然不会有*,这直接导致判断结果完全偏离预期。- 逻辑取反的匹配偏差:原本想筛选不包含
_B的文件,但错误的通配符让contains返回的结果全错,再加上波浪号取反,自然出现了选中相反文件的情况。
修正后的代码
把判断条件改成下面这样就能实现需求:
for k=1:n if(~contains(files(k).name, '_B')) % 这里写你的文件处理逻辑 end end
补充说明
- 这个条件会精准筛选出文件名中不包含"_B"子串的文件,完全符合你的要求(不会排除仅含"B"的文件,只有当子串是"_B"时才会被排除)。
- 如果你的目标文件都是
.png后缀,担心误匹配其他格式的话,可以额外加后缀校验:
if(~contains(files(k).name, '_B') && endsWith(files(k).name, '.png')) % 处理逻辑 end
内容的提问来源于stack exchange,提问作者Matte
相关产品推荐
相关产品推荐

