You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:13:47