【matlab】使用movefile批量修改命名,并保留原命名中指定的数字
文章目录
- 【matlab】使用movefile批量修改命名,并保留原命名中指定的数字
- 一、情况说明
- 二、代码示例
- 通配符
- 正则表达式匹配 (regexp 函数):
- 提取捕获组中的数字 (number 变量):
一、情况说明
我现在有一个文件夹,我的命名是sigMMat_1.mat、sigMMat_2.mat、sigMMat_3.mat、sigMMat_69.mat,但是我发现我命名错了,要修改成sigMat_1.mat、sigMMat_2.mat、sigMMat_3.mat、sigMMat_69.mat.,即我要重命名的同时保留原命名中的下划线后面的数字。
二、代码示例
clear;clc;
% 指定包含.mat文件的文件夹路径
folderPath = 'path_to_your_folder'; % 文件夹路径% 获取文件夹内所有.mat文件的列表
matFiles = dir(fullfile(folderPath, 'sigMMat_*.mat'));% 循环遍历所有符合原始命名模式的.mat文件
for i = 1:length(matFiles)% 构造原始文件的完整路径originalFile = fullfile(folderPath, matFiles(i).name);% 使用正则表达式匹配并提取数字部分tokens = regexp(matFiles(i).name, 'sigMMat_(\d+).mat', 'tokens'); % 返回下划线后面的数组number = tokens{1}{1}; % 提取第一个捕获组,即数字部分% 构造新的文件名,使用提取的数字newFile = fullfile(folderPath, sprintf('sigMat_%s.mat', number));% 重命名文件movefile(originalFile, newFile);
end
通配符
fullfile(folderPath, ‘sigMMat_.mat’):fullfile函数用于构造完整的文件路径。这里它结合了folderPath和搜索模式’sigMMat_.mat’。搜索模式使用*作为通配符,匹配任何以’sigMMat_‘开头并以’.mat’结尾的文件。
正则表达式匹配 (regexp 函数):
tokens = regexp(matFiles(i).name, 'sigMMat_(\d+).mat', 'tokens');
- regexp 是 MATLAB 中用于执行正则表达式匹配的函数。
- 第一个参数 matFiles(i).name 是要进行匹配检查的文件名字符串。
- 第二个参数 ‘sigMMat_(\d+).mat’ 是正则表达式模式:
sigMMat_ 匹配字符串中字面量 “sigMMat_”。
(\d+) 是一个捕获组,\d 表示数字字符(0-9),+ 表示一个或多个前面的字符。因此,\d+ 将匹配一个或多个连续数字。
.mat 匹配字符串中字面量 “.mat”。
‘tokens’ 是一个选项,指定 regexp 函数返回匹配的捕获组作为单元数组的单元数组(即二维单元数组)。
提取捕获组中的数字 (number 变量):
number = tokens{1}{1}; % 提取第一个捕获组,即数字部分
tokens 是由 regexp 函数返回的二维单元数组,其中包含了所有捕获组的内容。
tokens{1} 访问第一个捕获组(在本例中,我们关注的是文件名中的数字部分)。
tokens{1}{1} 访问捕获组中的第一个元素,这是正则表达式匹配到的第一个也是唯一的数字字符串。
这个字符串然后被赋值给变量 number。
- 如果你的命名是sigMMat_1_20.mat、sigMMat_10_20.mat,那么可以通过下面这样的代码来提取两个数字
% 使用正则表达式匹配并提取数字部分tokens = regexp(matFiles(i).name, 'sigMMat_(\d+)_(\d+).mat', 'tokens');number1 = tokens{1}{1}; fprintf('提取的数字是: %s\n', number1);number2 = tokens{1}{2}; fprintf('提取的数字是: %s\n', number2);