1

序幕:

输入字符串: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知之甚少。我可以阅读和理解其中的大部分内容,但写一篇我觉得很难

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

4

1 回答 1

2

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

为此,您可以使用如下表达式:

(?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)

这将验证但不解析字符串。我相信要构建一棵你想要的树,你必须使用解析器。

于 2013-04-04T13:08:23.517 回答