for n=1:37
for m=2:71
rep1 = regexp(Cell1{n,m}, 'f[0-9]*', 'match')
rep2 = regexp(rep1, '[0-9]*', 'match')
rep2 = [rep2{:}]
cln = str2double(rep2)
Cell2{n,cln} = Cell1{n,m}
end
end
细胞1是37x71细胞,细胞2是37x71空细胞。
实施例
Cell1{1,2} = -(f32.*x1.*x6)./v1
如果我单独运行上面的循环的每个部分,该功能按预期工作。但是,当执行整个循环时,它会返回cln
作为NaN。
答案 0 :(得分:2)
您正在获取NaN,因为您的正则表达式与Cell1
的某个值不匹配,并返回一个空字符串(str2double
转换为NaN)。
但是让我们在这里退一步。您可以在单元格数组上使用regexp
,因此无需遍历所有元素。此外,您可以使用look behind assertion查找数字前面的“f”,从而阻止使用regexp
两次。
stringNumber = regexp(Cell1, '(?<=f)[0-9]*', 'match', 'once');
numbers = str2double(stringNumber);
然后,您可以检查NaN(isnan(numbers)
)并仔细查看Cell1
的元素,看看为什么正则表达式没有在特定字符串中找到数字。
一旦你解决了问题,就可以像你正在做的那样分配给Cell2
Cell2 = cell(37, 71);
for k = 1:numel(numbers)
row = mod(k - 1, size(Cell1, 2)) + 1;
Cell2(row, numbers(k)) = Cell1(k);
end