% Set up the input
c = { ...
'[1, 2]'
'[3]'
'[10, 3]'
'[1, 12]'
'[11, 12]'
};
n = cell(size(c)); % Initialise output
for ii = 1:numel(n) % Loop over chars in 'c'
n{ii} = str2num(c{ii}); % convert char to numeric array
n{ii}(end+1:2) = -1; % Extend (if needed) to 2 elements = -1
end
% (Optional) Convert from a cell to an Nx2 array
n = cell2mat(n);
如果您真的想使用正则表达式,可以用类似的代码替换循环部分:
n = regexp( c, '\d{1,2}', 'match' ); % Match between one and two digits
for ii = 1:numel(n)
n{ii} = str2double(n{ii}); % Convert cellstr of chars to arrays
n{ii}(end+1:2) = -1; % Pad to be at least 2 elements
end
1条答案
按热度按时间bnlyeluc1#
您可以使用
str2num
将格式良好的字符(您似乎有)转换为正确的数组/标量。然后简单地从end+1
元素填充到值为-1
的第二个元素(注意,在已经有两个元素的情况下这不是什么)。这是在一个小循环中最清楚地完成的,请参阅评论了解详细信息:
如果您真的想使用正则表达式,可以用类似的代码替换循环部分:
但有很多方法可以在不使用正则表达式的情况下完成此操作,例如,您可以使用
erase
方括号,用逗号分隔,然后根据每行中是否有逗号来填充-1
。将其全部 Package 在一个更难阅读(与循环相比)的cellfun
中,然后您就会得到一行代码:为了便于阅读和调试,我建议使用其中的一个循环。