如何在 MATLAB 中 select 不包含特定字符串的文件?

How to select files that don't contain a certain string in MATLAB?

我有一个包含 10000 个文件的目录。我想 select 那些不包含字符串“_B”的文件进行处理。我不想排除其他带有字符 B 的文件。

我尝试了以下操作:

for k=1:n
    if(~contains(files(k).name, '*_B*.png'))
    ...
end

但这只是 select 所有带有“_B”的文件。如果我删除 "contains" 前面的波浪号,none 的文件将被 selected。我该把这条线改成什么才能得到想要的结果?

正如@Adriaan 提到的他的评论,您可以使用 strcmp 来比较字符串。在你的情况下你想做这样的事情:

for k=1:n
    if strcmp(files(k).name,'_B') %compare your filename with '_B', strcmp returns 1 if it finds the string '_B' in it, 0 otherwise
    %process _B files
    end
end

您可以通过应用单元格函数来避免循环。首先列出文件。在这里,我列出了所有以“.png”结尾的文件。然后查看哪些包含字符串 '_B',然后选择不带它的文件名。

DIR=dir('*.png');
fName={DIR(:).name}';
searchResult=cellfun(@findstr,fName,repmat({'_B'},length(fName),1),'UniformOutput',false);
chosen=fName(cellfun(@isempty,searchResult));

模式语句中的通配符可能是问题的原因; contains 不需要它们。正如函数名称所暗示的那样,如果字符串 'contains' 是模式字符串,它会 return 为真,不管它周围有什么。

所以 对于 _B.png123_B.pngrandomfilename_Bahaha.whatever

contains(files(k).name, '_B') 将 return 为真

因此,您需要对现有代码进行的唯一更改是从模式字符串中删除通配符,只保留 '_B'