The problem is that when the regex matches the first time, it consumes the characters from the input string that it has matched with. So in first match, it matches with:
...0.0....0.0...
^^^
so then for the next match it will consider the remainder of the string which is
....0.0...
and there, as you can see, it will only find a single match.
One way around this issue is to use a zero width lookahead assertion, provided that your regex engine supports that. So your regex would look like
0[.]{1,3}(?=0)
The meaning of this is that it will match the 0
at the end but it will not consume it. The issue with this approach is that it will not include that 0 in the matches. One solution for this issue is add the 0
afterwards yourself.