Erfassen einer wiederholten Gruppe

Ich versuche, eine Zeichenfolge wie die folgende mit einem regulären .NET-Ausdruck zu analysieren:

H3Y5NC8E-TGA5B6SB-2NVAQ4E0

und geben Sie Folgendes mit Split zurück: H3Y5NC8E TGA5B6SB 2NVAQ4E0

Ich überprüfe jedes Zeichen anhand eines bestimmten Zeichensatzes (beachten Sie, dass die Buchstaben "I", "O", "U" und "W" fehlen). Die Verwendung von "string.Split" ist daher keine Option. Die Anzahl der Zeichen in jeder Gruppe kann variieren und die Anzahl der Gruppen kann ebenfalls variieren. Ich benutze den folgenden Ausdruck:

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

Dies entspricht genau 3 Gruppen mit jeweils 8 Zeichen. Mehr oder weniger schlagen fehl. Dies funktioniert insofern, als es korrekt mit der Eingabe übereinstimmt. Wenn ich jedoch die Split-Methode verwende, um jede Zeichengruppe zu extrahieren, erhalte ich nur die letzte Gruppe. RegexBuddy beschwert sich, dass ich die Erfassungsgruppe selbst wiederholt habe und dass ich eine Erfassungsgruppe um die wiederholte Gruppe legen sollte. Keiner meiner Versuche, dies zu tun, führt jedoch zum gewünschten Ergebnis. Ich habe Ausdrücke wie diesen ausprobiert:

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

Aber das funktioniert nicht.

Da ich den regulären Ausdruck im Code generiere, könnte ich ihn einfach um die Anzahl der Gruppen erweitern, aber ich habe auf eine elegantere Lösung gehofft.

Bitte beachten Sie, dass der Zeichensatz nicht das gesamte Alphabet enthält. Es ist Teil eines Produktaktivierungssystems. Daher werden alle Zeichen entfernt, die versehentlich als Zahlen oder andere Zeichen interpretiert werden können. z.B. Die Buchstaben "I", "O", "U" und "W" befinden sich nicht im Zeichensatz.

Die Bindestriche sind optional, da ein Benutzer sie nicht von oben eingeben muss. Sie können jedoch vorhanden sein, wenn der Benutzer das Kopieren und Einfügen ausgeführt hat.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage