.NET正規表現を使用して、次のような文字列を解析しようとしています。
H3Y5NC8E-TGA5B6SB-2NVAQ4E0
分割を使用して以下を返します:H3Y5NC8E TGA5B6SB 2NVAQ4E0
各文字を特定の文字セットに対して検証するため(文字「I」、「O」、「U」、「W」はないことに注意してください)、string.Splitを使用することはできません。各グループの文字数はさまざまであり、グループ数もさまざまです。次の式を使用しています。
([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8}-?){3}
これは、それぞれ8文字の3つのグループに正確に一致します。多かれ少なかれ試合に失敗します。これは、入力と正しく一致する限り機能します。ただし、Splitメソッドを使用して各文字グループを抽出すると、最終的なグループが取得されます。RegexBuddyは、キャプチャグループ自体を繰り返したので、繰り返しグループの周りにキャプチャグループを配置する必要があると文句を言います。ただし、これを実行しようとしても、目的の結果は得られません。私はこのような表現を試みてきました:
(([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8})-?){4}
しかし、これは機能しません。
コードで正規表現を生成するので、グループの数だけ拡張できますが、より洗練されたソリューションを望んでいました。
文字セットにはアルファベット全体が含まれていないことに注意してください。これは、製品アクティベーションシステムの一部です。そのため、誤って数字やその他の文字として解釈される可能性のある文字はすべて削除されます。たとえば、文字「I」、「O」、「U」、および「W」は文字セットに含まれていません。
ハイフンは、ユーザーが上から入力する必要がないためオプションですが、ユーザーがコピー&ペーストを実行した場合は、ハイフンを入力できます。