当前位置:  开发笔记 > 编程语言 > 正文

捕获一个重复的组

如何解决《捕获一个重复的组》经验,为你挑选了1个好方法。

我试图使用.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'不在字符集中.

连字符是可选的,因为用户不需要顶部输入,但如果用户完成了复制和粘贴,它们就可以在那里.



1> Imran..:

顺便说一下,您可以用更易读的减去字符类替换[ABCDEFGHJKLMNPQRSTVXYZ0123456789]字符类.

[[A-Z\d]-[IOUW]]

如果您只想匹配3个这样的组,为什么不在正则表达式中使用此模式3次并仅使用捕获的1,2,3个子组来形成新字符串?

([[A-Z\d]-[IOUW]]){8}-([[A-Z\d]-[IOUW]]){8}-([[A-Z\d]-[IOUW]]){8}

在PHP我会回来(我不知道.NET)

return "$1 $2 $3";

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有