我有多个以相同方式命名的文件:'RefBu12CyclesAmpl0.20Freq2.25VR0.0000Dist4cmSilence25000Fs25MHz'。
我试图创建一个返回值并在字符串和数字之间进行区别的函数,但是我可以使它返回正确的值。

有任何想法吗?

function [File] = get_somenthing(file_name)
expression = '(?<Cycles>\d+)(?<Ampl>\D\S.+)(?<Freq>\d+)(?<VR>\d\S+)(?<Dist>\d.+)(?<Silence>\d+)(?<Fs>\d)'
File = regexp(file_name,expression,'names')

最佳答案

以下正则表达式匹配数字(可选),后跟点和数字。我认为数字是真实的,不包括符号,并且不能使用科学计数法:

s = 'RefBu12CyclesAmpl0.20Freq2.25VR0.0000Dist4cmSilence25000Fs25MHz';
values_str = regexp(s, '\d+(\.\d+)?', 'match');
values = str2double(values_str);

这给
>> values_str
values_str =
  1×7 cell array
    {'12'}    {'0.20'}    {'2.25'}    {'0.0000'}    {'4'}    {'25000'}    {'25'}

>> values
values =
   1.0e+04 *
   0.001200000000000   0.000020000000000   0.000225000000000                   0   0.000400000000000   2.500000000000000   0.002500000000000

08-17 11:16