在我的C#win表单项目中,我有这个正则表达式:
^(\[00\])(\[([+-])\]\[(\d+)\]\[(\d{14})\]\[(\d+)\]\$){1,5}
匹配此字符串:
[00][-][300000][20130202200417][1562000]$[-][300000][20140202200417][1562000]$
效果很好,但我想让[]
中的每个值都在不同的组中。通过这个正则表达式,群体将是这样的:
[00]
[-][300000][20140202200417][1562000]$
-
300000
20140202200417
1562000
但是我希望第二个值位于不同的组中,如:
[-]
[30000]
[20140202200417]
[1562000]
所以最终的结果是:
[00]
[-]
[30000]
[20140202200417]
[1562000]
[-]
[300000]
[20140202200417]
[1562000]
答案 0 :(得分:0)
您可以通过创建外部组non-capturing来获得所需的效果:
^(\[00\])(?:\[([+-])\]\[(\d+)\]\[(\d{14})\]\[(\d+)\]\$){1,5}
// ^^
编辑:(回复编辑问题)
要将重复{1,5}
的结果捕获到其自己的编号下的单独组中,您需要手动“展开”表达式,即重复五次,在最后四个之后带问号(即替换{{1与} (?:...)
链接。)
(?:...)(?:...)?(?:...)?(?:...)?(?:...)?
表达式变得更大,甚至更不易读,但它可以实现您想要实现的目标。
答案 1 :(得分:0)
检查一下:
\[(\d+|[-+])\]
结果如你所愿。