Это скорее проблема регулярных выражений, чем проблема MATLAB. Вот рабочий пример для обеих ваших задач:
filenames1 = {
'First_2000_ This is the first file.pdf'
'Second_2010_ second file.pdf'
'Thd_1987_Third file.pdf'
};
fun1 = @(x) regexprep(x, '^(.+\d{4})_ (.+)$', '$1_$2');
newfilenames1 = cellfun(fun1, filenames1, 'UniformOutput', false);
filenames2 = {
'2018-04-19 This is the first file.pdf'
'19190829Second file.pdf'
};
fun2 = @(x) regexprep(x, '^(\d{4})-(\d{2})-(\d{2}) (.+)$', '$1$2$3$4');
newfilenames2 = cellfun(fun2, filenames2, 'UniformOutput', false);
Вывод:
newfilenames1 =
3×1 cell array
{'First_2000_This is the first file.pdf'}
{'Second_2010_second file.pdf' }
{'Thd_1987_Third file.pdf' }
newfilenames2 =
2×1 cell array
{'20180419This is the first file.pdf'}
{'19190829Second file.pdf' }
Если вам нужно сделать это много, вы можете действительно углубиться в регулярные выражения и понять эти странные выражения.
PS Поскольку в этих заданиях по переименованию вообще не используются числовые вычисления, вы можете рассмотреть возможность использования языка сценариев общего назначения (например, Python), если вы не ограничены MATLAB. По моему личному опыту, Python предлагает более простые и мощные операции с строками, и я вижу гораздо лучшую производительность при переименовании большого количества файлов.