如何从MAT文件名中提取十进制数值?现有代码提取小数文件名异常
解决MATLAB提取带小数点的文件名数值问题
这个问题我之前处理过!原来的正则表达式只匹配纯数字序列,完全没考虑带小数点的浮点数情况,所以才会把P0.01.mat里的数字拆成0、0、1,最后拿到错误的结果1。
核心修改:正则表达式适配浮点数
要正确提取整数和小数,我们需要用能匹配浮点数格式的正则表达式,推荐使用:
(?<=P)\d*\.?\d+(?=\.mat)
拆解一下这个正则的作用:
(?<=P):反向预查,确保匹配内容的前面是字母P,精准定位文件名里的数值起始位置\d*\.?\d+:匹配浮点数结构:\d*:允许0个或多个整数部分(比如0.01的0,或者1的1)\.?:可选的小数点(整数时没有,小数时有)\d+:至少一个数字的小数部分(确保能捕获0.01的01,或者10的0)
(?=\.mat):正向预查,确保匹配内容的后面是.mat后缀,避免捕获无关内容
修改后的完整代码
把你的代码更新成下面这样,就能正确提取所有文件名的数值了:
datapath = '你的实际数据路径'; % 替换成你的文件夹路径 Files = dir(fullfile(datapath, 'P*.mat')); % 只筛选P开头的mat文件,更精准 numfiles = length(Files); results = cell(numfiles, 1); for k = 1:numfiles filename = Files(k).name; % 提取数值字符串 num_str = regexp(filename, '(?<=P)\d*\.?\d+(?=\.mat)', 'match'); % 转换为数值类型(方便后续计算) results{k} = str2double(num_str{1}); end % 输出查看结果 disp('提取到的数值:'); disp(results);
效果验证
- 对于
P0.01.mat,会提取出0.01 - 对于
P1.mat,会提取出1 - 对于
P10.mat,会提取出10
内容的提问来源于stack exchange,提问作者dejioni
相关产品推荐
相关产品推荐

