正则表达式为1(2),3,4(5,6(7,8),9),10

时间:2013-04-04 11:51:49

标签: c# regex

序幕:

输入字符串:1(2),3,4(5,6(7,8),9),10

我正在使用C#,我希望最终从上面的表达式中获得List<foo>

public class foo
{
    public int bar { get; set; }
    public List<foo> listOfFoo { get; set; }
}

我可以通过编写一些验证并逐个字符地解析来完成任务,但想知道更好的方法。代码越少,他们说的错误越少;)

查询

我正在寻找一个正则表达式来验证并可能捕获像

这样的字符串中的信息
1(2),3,4(5,6(7,8),9),10

字符串基本上是一组用逗号分隔的数字。但是一个数字可以使用括号( )

为它设置一些子表达式

我想从字符串中获取的内容是像

这样的图形
1
    2
3
4
    5
    6
        7
        8
    9
10

我对reg-ex知之甚少。我可以阅读&amp;了解他们中的大多数,但写一个我觉得很难的

寻找有人告诉我这样的事情是否可以使用RegEx实现。如果是这样,那应该是什么方法?我可以看到我需要一个递归表达式,任何链接或示例都会有很大的帮助。有人愿意给我Reg Reg本身就是锦上添花:)

1 个答案:

答案 0 :(得分:2)

.NET正则表达式balancing groups允许您计算和匹配平衡括号,就像这种情况一样。

为此你可以使用这样的表达式:

(?x)                 # ignore spaces and comments
^
(?:
    (?<open> \( )*   # open++
    \d+
    (?<-open> \) )*  # open--
    (?:
        , (?!\z)     # match a , but not at end of string
    |   \z           # or end of string
    )
)+
\z
(?(open) (?!) )      # fail if unbalanced (open > 0)

这将验证但不解析字符串。要像你一样构建一棵树,你必须使用我认为的解析器。