我正在尝试使用.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'不在字符集中。
连字符是可选的,因为用户不需要输入它们,但如果用户进行了复制和粘贴,则可以存在。