Matlab-帮助使用名称模式列出文件

时间:2018-10-05 15:31:37

标签: matlab

我正在尝试创建一个基于模式列出文件夹内容的函数,但是该列表包含的文件超出了需要。我将通过一个示例进行说明:考虑一个包含文件的文件夹

file.dat
file.dat._
file.dat.000
file.dat.001
...
file.dat.999

我对.em,.001等文件中的 only 感兴趣。文件file.datfile.dat._将被排除。 后面的编号也可以是.0000,.0001,依此类推,因此位数不一定是3。

我尝试使用模式为file.dat.*的Dir命令-由于某些原因(为什么最后一个逗号被不同地对待?)和file.dat包含了file.dat._。 >

一组“显而易见”的解决方案是添加一个附加的正则表达式或长度检查-但是,如果可能的话,我想避免这种情况。 这需要同时在UNIX和Windows(最好是MacOS)下工作。

任何优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

使用dir获取所有文件名,并使用正则表达式'^file\.dat\.\d+$'对其进行过滤。符合条件:

  • 字符串(^)的开头
  • 后跟字符串file.dat.file\.dat\.
  • 后跟一位或多位数字(\d+
  • 然后字符串必须以($)结尾

由于dir的输出是char向量的单元格数组,因此regex返回具有每个char向量的匹配索引的单元格数组。匹配索引只能是1[],因此将any应用于每个单元格的内容以将其减少为truefalse应该保留哪些文件名。

f = dir('path/to/folder');
names = {f.name};
ind = cellfun(@any, regexp(names, '^file\.dat\.\d+$'));
names = names(ind);