Why are you storing a Color value in a DB as a string? It fits in an unsigned integer as a "native" value ... and then it's just a simple matter to get a Color back again:
Color c = Color.AliceBlue;
int i = c.ToArgb();
c = Color.FromArgb(i);
To play with strings is both inefficient, and cumbersome:
string s = "Color [A=255, R=128, G=0, B=255]";
Match m = Regex.Match(s, @"A=(?<Alpha>\d+),\s*R=(?<Red>\d+),\s*G=(?<Green>\d+),\s*B=(?<Blue>\d+)");
if (m.Success)
{
int alpha = int.Parse(m.Groups["Alpha"].Value);
int red = int.Parse(m.Groups["Red"].Value);
int green = int.Parse(m.Groups["Green"].Value);
int blue = int.Parse(m.Groups["Blue"].Value);
Color c = Color.FromArgb(alpha, red, green, blue);
...
}