我有一组字符串(总共几千个)我需要解析如下所示:
'22-213-1-0,0'
'4-23-1-1,0'
'85-572A-1-1,0'
'3-13-1-1,0'
'6-58A-1-1,0'
我想分别返回第一个数字(不是数字!),第二个数字和字母(如果存在):
'22' '213' ''
'4' '23' ''
'85' '572' 'A'
'3' '13' ''
'6' '58' 'A'
我使用了一个正则表达式来做到这一点:
input = {'22-213-1-0,0' '4-23-1-1,0' '85-572A-1-1,0' '3-13-1-1,0' '6-58A-1-1,0'}'
test='(\d*)+[-]+(\d*)+(\w)+[-]\w*';
for i=1:length(input)
parsedstring=regexp(input(i),test,'tokens');
output(i,1)=cellfun(@str2num,parsedstring{1}{1}(1));
output(i,2)=cellfun(@str2num,parsedstring{1}{1}(2));
letter(i)=parsedstring{1}{1}(3);
end
但结果似乎不一致:输出=
22 21
4 2
85 572
3 1
6 58
字母 =
'3' '3' 'A' '3' 'A'
为什么正则表达式有时只返回第二个数字的第一个数字?我认为当第一个数字只有 1 位长时可能会发生这种情况,但最后一个字符串证明有时它可以正确解析单个数字。我错过了什么?