what I could not understand why all these missing comes in between
All of the elements of your regex are optional, which means the regex can (and does) match the empty string.
[+-]? - ZERO or one matches
\d* - ZERO or more matches
\.? - ZERO or one matches
\d* - ZERO or more matches
At every position in the input, the regex tries to find the longest match. For example, here
'32 -3.723 +98.6 .357 0.86'
^
the longest match is the empty string.
There are several ways to work around this. Rather than trying to shoehorn the regex into not matching empty strings, I personally would filter them out post-matching.