I am guessing that you want variable length numbers prefixed with the code. Try this:
Regex reg = new Regex(@"G(?<G>\d+(\.\d+){0,1})X(?<X>\d+(\.\d+){0,1})Y(?<Y>\d+(\.\d+){0,1})");
Match m = reg.Match("G40X56.9808Y98.987");
if (m.Success)
{
Console.WriteLine("{0}:{1}", "G", m.Groups["G"]);
Console.WriteLine("{0}:{1}", "X", m.Groups["X"]);
Console.WriteLine("{0}:{1}", "Y", m.Groups["Y"]);
}