You probably don't need to do anything fancy really. Something like this should work.
Name = Name.Trim();
arrNames = Name.Split(' ');
if (arrNames.Length > 0) {
GivenName = arrNames[0];
}
if (arrNames.Length > 1) {
FamilyName = arrNames[arrNames.Length - 1];
}
if (arrNames.Length > 2) {
MiddleName = string.Join(" ", arrNames, 1, arrNames.Length - 2);
}
You may also want to check for titles first.