我会推荐一个工具,如gplex/gppg,GOLD,ANTLR来做这种工作,特别是因为你会评估解析结果。
如果你坚持使用.NET RegEx,我建议你看看使用Balancing Group Definitions。
如果你想要一些更容易处理的事情,那么我会考虑编写一个简单的Recursive Descent Parser将输入分解为语法树,然后对其进行评估。维基百科有一个用C语言编写的体面样本(没有指针,所以很容易转换为.net),我也在下面复制它。
均衡组样品
using System;
using System.Text.RegularExpressions;
class Example
{
public static void Main()
{
string pattern = "^[^<>]*" +
"(" +
"((?'Open']*)+" +
"((?'Close-Open'>)[^<>]*)+" +
")*" +
"(?(Open)(?!))$";
string input = ">";
Match m = Regex.Match(input, pattern);
if (m.Success == true)
{
Console.WriteLine("Input: \"{0}\"