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,“#”)
的内容来避免这种情况,从而将它们与中间的一些不匹配字符连接起来。