The way it's presented currently implies:
"One two [three;3] four five" will split into "One", "two", "three" or "3", "four", and "five"
What actually happens is that it splits into:
"One two", "three" or "3", and "four five"
If the user is only presented with:
"One [two;2] three" splits into "One", "Two" or "2", and "Three"
Where coincidentally every split is always one word(thus why is referred to "String.Split()"), it may be expected that something like:
"One two three" will split into "One", "two", and "three", even though it won't because there are no dynamic sections within the command name.
To make it as clear as possible, I would include a list of what the example actually splits into.
Something like:
"Select car [1..10] and send it to the[pits;garage;track][please;]"
If now you say "select car 9 and send it to the garage",
"{CMDSEGMENT:0}" will produce "select car"
"{CMDSEGMENT:1}" will produce "9"
"{CMDSEGMENT:2}" will produce "and send it to the"
"{CMDSEGMENT:3}" will produce "garage"
"{CMDSEGMENT:4}" will produce "", as the optional "please" was not spoken
"{CMDSEGMENT:5}" will produce "Not Set", as there are only five possible segments to this command name