Capturando um grupo repetido
Estou tentando analisar uma seqüência de caracteres como a seguir usando uma expressão regular do .NET:
H3Y5NC8E-TGA5B6SB-2NVAQ4E0
e retorne o seguinte usando Split: H3Y5NC8E TGA5B6SB 2NVAQ4E0
Valido cada caractere com relação a um conjunto de caracteres específico (observe que as letras 'I', 'O', 'U' e 'W' estão ausentes), portanto, usar string.Split não é uma opção. O número de caracteres em cada grupo pode variar e o número de grupos também pode variar. Estou usando a seguinte expressão:
([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8}-?){3}
Isso corresponderá exatamente a 3 grupos de 8 caracteres cada. Mais ou menos irá falhar na partida. Isso funciona na medida em que corresponde corretamente à entrada. No entanto, quando eu uso o método Split para extrair cada grupo de caracteres, apenas obtenho o grupo final. RegexBuddy reclama que eu repeti o próprio grupo de captura e que eu deveria colocar um grupo de captura ao redor do grupo repetido. No entanto, nenhuma das minhas tentativas de fazer isso alcança o resultado desejado. Eu tenho tentado expressões como esta:
(([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8})-?){4}
Mas isso não funciona.
Desde que eu gere a regex no código, eu poderia expandi-la pelo número de grupos, mas esperava uma solução mais elegante.
Observe que o conjunto de caracteres não inclui o alfabeto inteiro. Faz parte de um sistema de ativação de produto. Como tal, quaisquer caracteres que possam ser acidentalmente interpretados como números ou outros caracteres são removidos. por exemplo. As letras 'I', 'O', 'U' e 'W' não estão no conjunto de caracteres.
Os hífens são opcionais, pois o usuário não precisa digitá-los na parte superior, mas podem estar lá se o usuário tiver copiado e colado.