EAN128 o GS1-128 decodificación c #

Aquí está la muestra de EAN128 o nuevo nombre de código de barras GS1-128

01088888931021461712031510W1040190

Quiero decodificarlo a ais

(01) 08888893102146
(17) 120315
(10) W1040190

Pero el código de barras se puede cambiar así

1712031510W1040190
(17) 120315
(10) W1040190

hay alguna forma posible de resolverlo con regex o cuál es la mejor manera

Ahora estoy intentando esto

public String AICodes(String pAI)
    {
        switch (pAI)
        {
            case "01":
                return "01\\d{14}";
            case "17":
                return "17\\d{6}";
            case "10":
                return "17\\d{6}10[a-zA-Z0-9|]{1,20}";
        }
        return String.Empty;
    }

private void GS1DataConvert(string pBarcode, string pBarfnc)
    {
       Match match = Regex.Match(pBarcode, AICodes(pBarfnc));
        if (match.Success)
        {
            MessageBox.Show(match.Groups[0].Value);
        }
    }

string barfnc = "01";

GS1DataConvert(barcode, barfnc);
barfnc = "17";
GS1DataConvert(barcode, barfnc);
barfnc = "10";
GS1DataConvert(barcode, barfnc);

Respuestas a la pregunta(8)

Su respuesta a la pregunta