Most likely, the output contains \r, which simply returns the cursor to the beginning of the current line. If that's true, then you can adjust the string accordingly by erasing the current line. It's not simple, though - you have to also overwrite the previous line. I'll work on some code and see if I can arrive at a solution.
EDIT: Here's the solution I came up with - it's lightly tested. The output will be in the lines
variable, which you can either analyze individually or join together to analyze as a single line.
string rawOut = "Results:\r\n___ % done\r 10\r 20\r 30\r\nError!";
string[] lines = Regex.Split(rawOut, Environment.NewLine);
for(int j=0; j<lines.Length; j++)
{
string line = lines[j];
if (line.Contains('\r'))
{
string[] subLines = line.Split('\r');
char[] mainLine = subLines[0].ToCharArray();
for(int i=1; i<subLines.Length; i++)
{
string subLine = Regex.Replace(subLines[i], ".\x0008(.)", "$1");
if (subLine.Length > mainLine.Length) mainLine = subLine.ToCharArray();
else subLine.CopyTo(0, mainLine, 0, subLine.Length);
}
lines[j] = new String(mainLine);
}
}