【问题标题】:How to extract specific files from a list of files in MATLAB如何从 MATLAB 中的文件列表中提取特定文件
【发布时间】:2013-03-15 05:39:56
【问题描述】:

我有一个名为 list 的单元格数组,其中包含一个文件列表。我想只从该列表中提取特定文件并将它们存储在同一个数组中。这是我想要做的:

function [ varargout ] = myFiles( varargin )

list = {'test.m' '.' '..' 'test1.m' 'test2.txt'};

list = strmatch('*.m', list)

end

我的最终列表应该如下所示,但是索引应该足够了。

list = test.m  test1.m

我在 Windows 上使用 MATLAB。在双引号中使用模式会引发错误。 也尝试使用 \\'s 作为 (.) 和/或 (*) 的转义序列。

【问题讨论】:

    标签: regex matlab


    【解决方案1】:

    strmatch 用于查找以给定前缀开头的字符串。不支持正则表达式。为此,您需要regexp,它以相反的顺序获取其参数。或者,如果您反转所有字符串,您可以使用strmatch('m.',list),然后再次反转结果以恢复文件名。

    【讨论】:

    • list(strmatch('m.',cellfun(@(x)fliplr(x),list,'UniformOutput',false))))
    • 这可能更清楚:list(strmatch(fliplr('.m'),cellfun(@(x)fliplr(x),list,'UniformOutput',false))))
    【解决方案2】:

    根据here,您需要这样的东西:.*\.m$问题是,与 Windows 中通常的搜索不同,* 表示前面有 0 次或多次重复,因此单独进行是行不通的。

    在这种情况下,我是说匹配任何字符(. 表示任何单个字符)0 次或更多次,然后在最后加上 .m$ 指定匹配必须在字符串的末尾结束。

    【讨论】:

    • list = regexp(list,'.*\.m$', 'match') celldisp(list) 在尝试上面的代码行时,会创建一个二维列表,以及空的单元格(当然与模式不匹配)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多