我有一个正则表达式定义感兴趣的文件名.列出符合此条件的目录中的所有文件的最佳方法是什么?
我的尝试是:
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:\users\oleg\desktop'; 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()则解析它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。