将正则表达式中的不同组值分隔为方括号

时间:2015-02-07 08:10:43

标签: c# regex

在我的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]

2 个答案:

答案 0 :(得分:0)

您可以通过创建外部组non-capturing来获得所需的效果:

^(\[00\])(?:\[([+-])\]\[(\d+)\]\[(\d{14})\]\[(\d+)\]\$){1,5}
//        ^^

Demo 1.

编辑:(回复编辑问题)

要将重复{1,5}的结果捕获到其自己的编号下的单独组中,您需要手动“展开”表达式,即重复五次,在最后四个之后带问号(即替换{{1与} (?:...)链接。)

(?:...)(?:...)?(?:...)?(?:...)?(?:...)?

表达式变得更大,甚至更不易读,但它可以实现您想要实现的目标。

Demo 2.

答案 1 :(得分:0)

检查一下:

\[(\d+|[-+])\]

结果如你所愿。