我正在尝试创建一个基于模式列出文件夹内容的函数,但是该列表包含的文件超出了需要。我将通过一个示例进行说明:考虑一个包含文件的文件夹
file.dat
file.dat._
file.dat.000
file.dat.001
...
file.dat.999
我对.em,.001等文件中的 only 感兴趣。文件file.dat
和file.dat._
将被排除。
后面的编号也可以是.0000,.0001,依此类推,因此位数不一定是3。
我尝试使用模式为file.dat.*
的Dir命令-由于某些原因(为什么最后一个逗号被不同地对待?)和file.dat
包含了file.dat._
。 >
一组“显而易见”的解决方案是添加一个附加的正则表达式或长度检查-但是,如果可能的话,我想避免这种情况。 这需要同时在UNIX和Windows(最好是MacOS)下工作。
任何优雅的解决方案?
答案 0 :(得分:1)
使用dir
获取所有文件名,并使用正则表达式'^file\.dat\.\d+$'
对其进行过滤。符合条件:
^
)的开头file.dat.
(file\.dat\.
)\d+
)$
)结尾由于dir
的输出是char向量的单元格数组,因此regex
返回具有每个char向量的匹配索引的单元格数组。匹配索引只能是1
或[]
,因此将any
应用于每个单元格的内容以将其减少为true
或false
应该保留哪些文件名。
f = dir('path/to/folder');
names = {f.name};
ind = cellfun(@any, regexp(names, '^file\.dat\.\d+$'));
names = names(ind);