I found the solution of @Walter Roberson, that I slightly modified (I just removed the option "once" after "match"), but it still holds the minus sign attached to the numbers:
a={'1','3','6-10','11-20'};
b = regexp(a, '(-?\d+(\.\d*)?)|(-?\.\d+)', 'match');
b{:}
ans = 1×1 cell array
    {'1'}
ans = 1×1 cell array
    {'3'}
ans = 1×2 cell array
    {'6'}    {'-10'}
ans = 1×2 cell array
    {'11'}    {'-20'}
