我正在尝试使用 .NET 正则表达式解析如下字符串:
H3Y5NC8E-TGA5B6SB-2NVAQ4E0
并使用拆分返回以下内容:H3Y5NC8E TGA5B6SB 2NVAQ4E0
我根据特定字符集验证每个字符(请注意,不存在字母“I”、“O”、“U”和“W”),因此不能使用 string.Split。每个组中的字符数可以变化,组数也可以变化。我正在使用以下表达式:
([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8}-?){3}
这将完全匹配 3 组,每组 8 个字符。或多或少都会导致比赛失败。只要它正确匹配输入,它就可以工作。但是,当我使用 Split 方法提取每个字符组时,我只得到最后一个组。RegexBuddy 抱怨我已经重复了捕获组本身,并且我应该在重复组周围放置一个捕获组。但是,我的任何尝试都没有达到预期的结果。我一直在尝试这样的表达:
(([ABCDEFGHJKLMNPQRSTVXYZ0123456789]{8})-?){4}
但这不起作用。
由于我在代码中生成了正则表达式,我可以将其扩展为组数,但我希望有一个更优雅的解决方案。
请注意,字符集不包括整个字母表。它是产品激活系统的一部分。因此,任何可能被意外解释为数字或其他字符的字符都将被删除。例如,字母“I”、“O”、“U”和“W”不在字符集中。
连字符是可选的,因为用户不需要在顶部键入它们,但如果用户完成复制和粘贴,它们可以在那里。