次のように解析する必要がある一連の文字列 (全部で数千) があります。
'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'
最初の数字 (数字ではない!)、2 番目の数字、および文字 (存在する場合) を別々に返したい:
'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
しかし、結果は一貫していないようです: output =
22 21
4 2
85 572
3 1
6 58
文字 =
'3' '3' 'A' '3' 'A'
正規表現がその 2 番目の数値の最初の桁のみを返すことがあるのはなぜですか? 最初の数字が 1 桁しかない場合に発生する可能性があると思っていましたが、最後の文字列は、1 桁を正しく解析する場合があることを証明しています。私は何が欠けていますか?