输入字符串: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本身就是锦上添花:)
答案 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)
这将验证但不解析字符串。要像你一样构建一棵树,你必须使用我认为的解析器。