Matlab 使用通配符查找单元格数组中的字符串

Matlab 使用通配符查找单元格数组中的字符串,matlab,find,cell,Matlab,Find,Cell,我有一个单元格数组,其最后一部分如下所示: Columns 8372 through 8375 {'w20091231_2000.nc'} {'w20091231_2020.nc'} {'w20091231_2040.nc'} {'w20091231_2100.nc'} Columns 8376 through 8379 {'w20091231_2120.nc'} {'w20091231_2140.nc'} {'w20091231_2200

我有一个单元格数组,其最后一部分如下所示:

Columns 8372 through 8375

    {'w20091231_2000.nc'}    {'w20091231_2020.nc'}    {'w20091231_2040.nc'}    {'w20091231_2100.nc'}

  Columns 8376 through 8379

    {'w20091231_2120.nc'}    {'w20091231_2140.nc'}    {'w20091231_2200.nc'}    {'w20091231_2220.nc'}

  Columns 8380 through 8383

    {'w20091231_2240.nc'}    {'w20091231_2300.nc'}    {'w20091231_2320.nc'}    {'w20091231_2340.nc'}

  Columns 8384 through 8387

    {'wD1.nc'}    {'wD2.nc'}    {'wD3.nc'}    {'wD4.nc'}
现在我想重新排列这个数组,使它只包含最后四个字符串。
{'wD1.nc'}{'wD2.nc'}{'wD3.nc'}{'wD4.nc'}

我试过了

IndexC = strfind(names,'wD*.nc');
Index = find(not(cellfun('isempty',IndexC)))

如果wD*.nc是wD4.nc,这两个值都可以工作,但是我当然只选择一个值,而不是我想要的四个值。
如何使用
*

我不得不在谷歌上搜索一下,但发现了这个问题,下面的方法似乎很有效:

IndexC = regexp(names, regexptranslate('wildcard', 'wD*.nc'));
Index = find(not(cellfun('isempty',IndexC)));
names2=names(Index)

我不得不在谷歌上搜索了一下,但发现了这个问题,下面这样的方法似乎奏效了:

IndexC = regexp(names, regexptranslate('wildcard', 'wD*.nc'));
Index = find(not(cellfun('isempty',IndexC)));
names2=names(Index)

在一行中使用带有
match
选项的regexp:

x = regexp([x{:}],'wD\d+\.nc','match')

在一行中使用带有
match
选项的regexp:

x = regexp([x{:}],'wD\d+\.nc','match')

尽管使用
[x{:}]
可能会在
x
的连续元素之间碰巧存在匹配时产生不期望的结果。您可以通过将
[x{:}]
替换为类似于
strjoin(x,“#”)
的内容来避免这种情况,以将它们与中间的一些不匹配字符连接起来。尽管如果在
[x{:}]
的连续元素之间碰巧存在匹配,则使用
[x{:}]
可能会产生不期望的结果。您可以通过将
[x{:}]
替换为类似于
strjoin(x,“#”)
的内容来避免这种情况,从而将它们与中间的一些不匹配字符连接起来。