MATLAB文件名分离

MATLAB文件名分离,matlab,split,Matlab,Split,在文件名中,如“10_m1_m2_const_m1_waves_20_90_m2_90_20_20200312_213048”,我需要分开 “10μm1μm2μconstμm1μwavesμ20μ90μm2μwavesμ90μ20”来自“20200312μ213048” 不起作用,因为许多uu是可变的 所以我需要移动一个文件: movefile([confpath,name(without 20200312_213048),'.config'],[name(without 20200312_21

在文件名中,如“10_m1_m2_const_m1_waves_20_90_m2_90_20_20200312_213048”,我需要分开 “10μm1μm2μconstμm1μwavesμ20μ90μm2μwavesμ90μ20”来自“20200312μ213048”

不起作用,因为许多uu是可变的

所以我需要移动一个文件:

movefile([confpath,name(without 20200312_213048),'.config'],[name(without 20200312_213048), filesep, name, '.config']);
你知道吗?谢谢大家!

您可以使用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。如果要拆分名称的点之前或之后始终存在密钥,请执行以下操作:

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’

也许您可以尝试使用regexp找到分离的起始位置: 以致

name1 = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
name2 = 20200312_213048
或下面带有选项标记的代码: 给

name_sep =
{
  [1,1] = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
  [1,2] = 20200312_213048
}
也许您可以尝试使用regexp找到分离的起始位置: 以致

name1 = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
name2 = 20200312_213048
或下面带有选项标记的代码: 给

name_sep =
{
  [1,1] = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
  [1,2] = 20200312_213048
}

只要时间戳始终位于字符串末尾,您就可以使用并从字符串末尾向后计数:

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'

只要时间戳始终位于字符串末尾,您就可以使用并从字符串末尾向后计数:

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'

如何确定正确的切割位置?总是12号吗?尾巴总是这个图案吗?我相信正则表达式会起作用,但首先我们必须了解模式。找到倒数第二个下划线如何?这样行吗?你如何定义切割的位置?@Daniel不,这是问题所在。有时它会像‘1_m1_waves_20_90_20200311_203018’那样调用,因此variable@Chris但是怎么做呢?零件20200312_213048的格式始终相同:YYYYMMDD_HHMMSS如何定义切割位置?-这是结尾前的第二条下划线如何确定正确的剪切位置?总是12号吗?尾巴总是这个图案吗?我相信正则表达式会起作用,但首先我们必须了解模式。找到倒数第二个下划线如何?这样行吗?你如何定义切割的位置?@Daniel不,这是问题所在。有时它会像‘1_m1_waves_20_90_20200311_203018’那样调用,因此variable@Chris但是怎么做呢?零件20200312_213048的格式始终相同:YYYYMMDD_HHMMSS如何定义切割位置?-这是前面的第二条下划线end@Fracture不客气!如果您认为我的答案有帮助,请随时投票/接受,谢谢@不客气!如果您认为我的答案有帮助,请随时投票/接受,谢谢!非常感谢。我可以用第二部分=谢谢!我可以用第二部分=