我想从表示
等表达式的字符串中提取数字位置(及其长度)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
答案 0 :(得分:1)
你绝对可以用正则表达式来做到这一点。以下模式应与数字匹配
pattern = '(\d*\.)?\d+';
然后,您可以使用'start'
和'end'
选项regexp
来确定起始和结束字符
starts = regexp(f1, pattern);
ends = regexp(f1, pattern, 'end');
numlist = [starts; (ends - starts) + 1];