Capturar un grupo repetido

Estoy tratando de analizar una cadena como la siguiente usando una expresión regular .NET:

H3Y5NC8E-TGA5B6SB-2NVAQ4E0

y devuelva lo siguiente usando Split: H3Y5NC8E TGA5B6SB 2NVAQ4E0

Valido cada carácter contra un conjunto de caracteres específico (tenga en cuenta que las letras 'I', 'O', 'U' y 'W' están ausentes), por lo que usar string.Split no es una opción. El número de caracteres en cada grupo puede variar y el número de grupos también puede variar. Estoy usando la siguiente expresión:

([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8}-?){3}

Esto coincidirá exactamente con 3 grupos de 8 caracteres cada uno. Más o menos fallará el partido. Esto funciona en la medida en que coincide correctamente con la entrada. Sin embargo, cuando uso el método Split para extraer cada grupo de caracteres, solo obtengo el grupo final. RegexBuddy se queja de que he repetido el grupo de captura en sí y de que debería poner un grupo de captura alrededor del grupo repetido. Sin embargo, ninguno de mis intentos de hacer esto logra el resultado deseado. He estado intentando expresiones como esta:

(([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8})-?){4}

Pero esto no funciona.

Como genero la expresión regular en el código, podría expandirla por la cantidad de grupos, pero esperaba una solución más elegante.

Tenga en cuenta que el conjunto de caracteres no incluye el alfabeto completo. Es parte de un sistema de activación del producto. Como tal, se eliminan los caracteres que pueden interpretarse accidentalmente como números u otros caracteres. p.ej. Las letras 'I', 'O', 'U' y 'W' no están en el conjunto de caracteres.

Los guiones son opcionales ya que un usuario no necesita escribirlos, pero pueden estar allí si el usuario ya ha copiado y pegado.

Respuestas a la pregunta(9)

Su respuesta a la pregunta