Matlab:从字符串中提取数字(整数和小数)的位置

时间:2017-03-26 14:20:40

标签: regex string matlab

我想从表示

等表达式的字符串中提取数字位置(及其长度)
f1 = '(z-(z.^3-5)./(3.*z.^2))';

我得到了单个整数(见下面的代码),但是对于更大的整数或十进制数

f2 = '(z-(z.^3-21)./(341.*z.^2))';
f3 = '(z-(z.^3-5.347)./(35.4983.*z.^2))';

逐案分析对我来说越来越混乱。也许使用正则表达式可以更容易地解决一般情况?

num_list = zeros(2,f1_length); 
k=1; 
for i=1:f1_length
    if isempty(str2num(f1(i)))
        continue; 
    else
        num_list(1,k) = i; num_list(2,k) = 1; k=k+1; 
    end
end; 

在删除右边的剩余0后,我得到'(z-(z。^ 3-5)./(3. * z。^ 2))'

8    10    15    21
1     1     1     1

1 个答案:

答案 0 :(得分:1)

你绝对可以用正则表达式来做到这一点。以下模式应与数字匹配

pattern = '(\d*\.)?\d+';

然后,您可以使用'start''end'选项regexp来确定起始和结束字符

starts = regexp(f1, pattern);
ends = regexp(f1, pattern, 'end');

numlist = [starts; (ends - starts) + 1];