Splitting a string into groups of up to 3 numbers, or one letter and up to 3 numbers
right ... "tempted to solve this with a regex" doesn't quite cut it. There is a regex that kinda sorta somewhat works, but I didn't get it to do exactly what I want.
Doesn't matter though, because I can make it do what I wanted, namely spit out the results directly as separate groups. Instead I got it to match the "last result" an:

private readonly Regex someNiceName = new Regex(@"^((?:[A-Z]\d|[1-9])\d{1,2})+$", RegexOptions.Compiled);

public List&lt;string&gt; SpecialSplit(string input)
{
    if (input == "") 
    {
       return new List&lt;string&gt;(); // base case for recursion
    }
    var match = someNiceName.Match(input);
    string last = match.Groups[1].Value;
    var precedessors = SpecialSplit(input.Substring(0, match.Groups[1].Index));
    precedessors.Add(last);
    return precedessors;
}


With a bit of luck we don't actually need this mess, but can rely on Captures instead:

public List&lt;string&gt; SpecialSplit(string input) 
{
    var match = someNiceName.Match(input);
    var fullMatch = match.Groups[0];
    return fullMatch.Captures().Select(c =&gt; c.Value).ToList();
}


unfortunately I do not have C# available to check right now, but that might work better :)