MATLAB文件名分离



在文件名"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'

相关内容

  • 没有找到相关文章