You can achieve what you want with a single operation Regex.Replace, but with the help of a specialized compliance evaluator:
var input = "4245 4 0 242 4424.09 0 422404 5955 0";
var results = Regex.Replace(input, @"(?:\s+|^)0(\s+)|(\s+0)$|\s+", m =>
m.Groups[1].Success ? ", " :
m.Groups[2].Success ? "" : ",");

, , , , .
:
(?:\s+|^)0(\s+) - 0, , , 1 ( 0 1)| -(\s+0)$ - 2, , 0 ($)| -\s+ - (3- ) 1 .
, , , 0 , 1 , 0 String.Replace.
var inp = "4245 4 0 0242 4424.09 0 422404 5955 0";
inp = inp.EndsWith(" 0") ? inp.Substring(0, inp.Length - 2) : inp;
var output = Regex.Replace(inp.Replace(" 0 ", ", "), @"(\d) (\d)", "$1,$2");