在文件名"name
"(如'10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048'
(中,我需要将来自'20200312_213048'
的'10_m1_m2_const_m1_waves_20_90_m2_waves_90_20'
name_sep = split(name,"_");
sep = '_';
name_join=[name_sep{1,1} sep name_sep{2,1} sep .....];
不起作用,因为许多"_"是可变的。
所以我需要移动一个文件:
movefile([confpath,name(without 20200312_213048),'.config'],[name(without 20200312_213048), filesep, name, '.config']);
你知道吗?非常感谢。
- 也许您可以尝试
regexp
来找到分离的起始位置:
ind = regexp(name,'_d+_d+$');
name1 = name(1:ind-1);
name2 = name(ind+1:end);
使得
name1 = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
name2 = 20200312_213048
- 或以下带有选项
tokens
的代码:
name_sep = cell2mat(regexp(name,'(.*)_(d+_d+$)','tokens','match'));
它给出
name_sep =
{
[1,1] = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
[1,2] = 20200312_213048
}
您可以使用strfind
。如果你有一个密钥总是出现在你想要拆分名称的点之前或之后:
nm = '10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048';
key = 'waves_90_20_';
idx = strfind(nm,key) + length(key);
nm(idx:end)
或者,如果你知道_
在你想要的部分中的作用:
idx = strfind(nm,'_');
nm(idx(end-2)+1:end)
在这两种情况下,结果都是:
'20_20200312_213048'
只要时间戳总是在字符串的末尾,就可以使用strfind
并从字符串的末尾向后计数:
name = '10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048';
udscr = strfind(name,'_');
name_date = name(udscr(end-1)+1:end)
name_meta = name(1:udscr(end-1)-1)
name_date =
'20200312_213048'
name_meta =
'10_m1_m2_const_m1_waves_20_90_m2_waves_90_20'