加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

列出给定正则表达式/一组扩展名的目录中的所有文件(Matlab)

发布时间:2020-12-14 06:23:26 所属栏目:百科 来源:网络整理
导读:我有一个正则表达式定义感兴趣的文件名.列出符合此条件的目录中的所有文件的最佳方法是什么? 我的尝试是: f = dir(DIR);f = {f([f.isdir] == 0).name};result = f(~cellfun(@isempty,regexpi(f,'.*(avi|mp4)'))); 但是,我想知道是否有更快和/或更清洁的解
我有一个正则表达式定义感兴趣的文件名.列出符合此条件的目录中的所有文件的最佳方法是什么?

我的尝试是:

f = dir(DIR);
f = {f([f.isdir] == 0).name};
result = f(~cellfun(@isempty,regexpi(f,'.*(avi|mp4)')));

但是,我想知道是否有更快和/或更清洁的解决方案呢?

是否可以简化它,如果不是正则表达式,我只有一个可能的文件扩展名列表?

从根本上说,你的方法就是我想要的.但是,您的代码行可以简化为(目录在正则表达式和最终串联中的空单元格中丢失):
f = dir('C:directory');
f = regexpi({f.name},'.*txt|.*pdf','match');
f = [f{:}];

另请注意,函数dir()接受通配符(*)但不接受多个扩展:

dir('C:directory*.avi')

这意味着您可以立即仅检索与扩展名匹配的文件,但是您必须循环扩展数量:

d   = 'C:usersolegdesktop';
ext = {'*.txt','*.pdf'};
f   = [];
for e = 1:numel(ext)
    f = [f; dir(fullfile(d,ext{e}))];
end

替代方案(不推荐)

ext = {'*.txt','*.pdf'};
str = ['!dir ' sprintf('%s ',ext{:}) '/B'];
textscan(evalc(str),'%s','Delimiter','')

其中str是!dir * .txt * .pdf / B和evalc()捕获字符串的评估,而textscan()则解析它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读