请高手指点一下:一个递归式的正则表达式的写法
请高手指点一下            
 TotalSpot*(TotalSpot*(TotalSpot*(MediaUnitCost*(1-MediaNegotiationDiscount)*(1-OtherMediaDiscount)*(1-Agency      Discount)*(1+MediaNegotiationLoading)*(1+OtherMediaLoading))))            
 怎么样写出一个匹配递归式的正则表达式            
 要求:       
 匹配所有括号里面的内容,       
 如:(1+MediaNegotiationLoading),       
 (MediaUnitCost*(1-MediaNegotiationDiscount)*(1-OtherMediaDiscount)*(1-Agency      Discount)*(1+MediaNegotiationLoading)*(1+OtherMediaLoading)),       
 (TotalSpot*(MediaUnitCost*(1-MediaNegotiationDiscount)*(1-OtherMediaDiscount)*(1-Agency      Discount)*(1+MediaNegotiationLoading)*(1+OtherMediaLoading))),       
 (TotalSpot*(TotalSpot*(MediaUnitCost*(1-MediaNegotiationDiscount)*(1-OtherMediaDiscount)*(1-Agency      Discount)*(1+MediaNegotiationLoading)*(1+OtherMediaLoading))))            
 等.....
------解决方案--------------------兄弟,我给你取出来了,虽然方法有点那个~恶,便毕竟是取出来了,下面是我的测试代码,你试下吧,至于里面方法有更简洁的你自己处理一下吧,还有,我没有存数组,这个应该就不难了吧,唉,一个多小时的青春啊   
 string yourStr=richTextBox1.Text ;        //你的源字符串 
 MatchCollection mc = Regex.Matches(yourStr,@ "\([^\(\)]+?\) ",RegexOptions.IgnoreCase);             //这个是用来取单一配对括号里的内容 
 foreach(Match m in mc) 
 { 
      richTextBox2.Text += m.Groups[0].Value+ "\n ";        //这是提取内容 
 }			 
 string start =  " ";                    //下面为取多重括号内的内容 
 string end =  " "; 
 int len = Regex.Replace(yourStr, ".*(? <!\\))(.*)$ ", "$1 ", RegexOptions.IgnoreCase).Length;   //这个是取最后“)”的数量,应该是有更好的方法,反正我是一起用正则了 
 for(int i=1;i <len;i++) 
 { 
     Match m = Regex.Match(yourStr, start+@ "\(([^\(\)]+?\([^\(\)]+?\))+?\) "+end, RegexOptions.IgnoreCase); 
     richTextBox2.Text += m.Groups[0].Value+ "\n ";        //这是提取内容 
     start +=@ "\([^\(\)]+? "; 
     end +=  @ "\) "; 
 }
------解决方案--------------------string a= "(TotalSpot*(TotalSpot*(MediaUnitCost*(1-MediaNegotiationDiscount)*(1-OtherMediaDiscount)*(1-Agency Discount)*(1+MediaNegotiationLoading)*(1+OtherMediaLoading)))) "; 
 int iCount=a.Length; 
 ArrayList aList=new ArrayList(); 
 for(int i=0;i <iCount;i++) 
 { 
 	if(a[i].Equals( '( ')) 
 	{ 
 		int iB=1,iE=0,j=0; 
 		for(j=i+1;j <iCount;j++) 
 		{ 
 			if(a[j].Equals( '( ')) 
 				iB++; 
 			if(a[j].Equals( ') ')) 
 				iE++; 
 			if(iB==iE) 
 				break; 
 		} 
 		aList.Add(a.Substring(i,j-i+1)); 
 	} 
 } 
 string[] sTemps=(string[])aList.ToArray(typeof(string));//转数组,用aList可不转 
 //不要意思,昨天开会,没来的急回你 这样简单处理就可以了,而且比正则的效率高出很多 
 //应该能适应所有情况