How would i capture and split serial data?
This string is actually fairly easy to split up, because everything is separated by commas nice and regularly.

Assuming you have the string in a char array (aka a C string) and not a String object (I and most other programmers abhor the String class) you can use the function strtok() to split the string up into parts.

So you have the string:

char string[] = "&lt;Alarm,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000&gt;";


The function strtok() takes, on its first call, the string you want to split and the delimiter that you want to split on.  It returns a pointer to the chunk:

char *alarm = strtok(string, ",");


alarm now contains &lt;Alarm and strtok() moves its internal pointer to point at the next character, so it sees the string as MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000&gt;

With the next and subsequent calls to strtok() you don't give it the string, or it will reset its internal pointer.  You just pass it NULL and it gives you the next block:

char *mposX = strtok(NULL, ",");
char *mposY = strtok(NULL, ",");
char *mposZ = strtok(NULL, ",");
char *wposX = strtok(NULL, ",");
char *wposY = strtok(NULL, ",");
char *wposZ = strtok(NULL, "&gt;");


Note that I changed the delimiter on the last one to &gt; so it chops off that extra character that we don't want (and there is no , after the last part).

So now you have 7 variables that point to chunks of the string, which has internally been chopped up and modified into individual substrings:

*alarm = "&lt;Alarm";
*mposX = "MPos:0.000";
*mposY = "0.000";
*mposZ = "0.000";
*wposX = "WPos:0.000";
*wposY = "0.000";
*wposZ = "0.000";


So now we can clean up the three entries that have extra stuff in them, and that is a simple as adding an offset value to the pointers we have:

alarm += 1;
mposX += 5;
wposX += 5;


Our list of pointers now looks like this:

*alarm = "Alarm";
*mposX = "0.000";
*mposY = "0.000";
*mposZ = "0.000";
*wposX = "0.000";
*wposY = "0.000";
*wposZ = "0.000";


The position variables can now be passed through strtod() to convert them to float values:

float mx = strtod(mposX, NULL);
float my = strtod(mposY, NULL);
float mz = strtod(mposZ, NULL);
float wx = strtod(wposX, NULL);
float wy = strtod(wposY, NULL);
float wz = strtod(wposZ, NULL);


You can do different things depending on the content of the *alarm string by using strcmp():

if (strcmp(alarm, "Busy") == 0) {
    // Something to do when Busy
}


etc.

Or you can just use it to print the content to the LCD.