Захват повторенной группы

Я пытаюсь проанализировать строку, как показано ниже, используя регулярное выражение .NET:

H3Y5NC8E-TGA5B6SB-2NVAQ4E0

и верните следующее с помощью Split: H3Y5NC8E TGA5B6SB 2NVAQ4E0

Я проверяю каждый символ по определенному набору символов (обратите внимание, что буквы «I», «O», «U» и «W» отсутствуют), поэтому использование string.Split не вариант. Количество символов в каждой группе может варьироваться, и количество групп также может варьироваться. Я использую следующее выражение:

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

Это будет соответствовать ровно 3 группам по 8 символов в каждой. Любой более или менее провалит матч. Это работает, если оно правильно соответствует входным данным. Однако, когда я использую метод Split для извлечения каждой группы символов, я просто получаю последнюю группу. RegexBuddy жалуется, что я повторил саму группу захвата и что я должен создать группу захвата вокруг повторной группы. Однако ни одна из моих попыток сделать это не достигла желаемого результата. Я пытался выражения как это:

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

Но это не работает.

Поскольку я генерирую регулярное выражение в коде, я мог бы просто расширить его по количеству групп, но я надеялся на более элегантное решение.

Обратите внимание, что набор символов не включает весь алфавит. Это часть системы активации продукта. Таким образом, любые символы, которые могут быть случайно интерпретированы как числа или другие символы, удаляются. например Буквы «I», «O», «U» и «W» не входят в набор символов.

Дефисы являются необязательными, поскольку пользователю не нужно вводить их сверху, но они могут быть там, если пользователь сделал копирование и вставку.

Ответы на вопрос(9)

Ваш ответ на вопрос