我在TextBox1.text中输入: 
1.何月岚 2.黄大庆 3.刘雅琴 4.王长春 5.杨理智 6.姚华                            
 7.赵丽娟 8.钟彬 MQSXG                                                          
 9.  CZ345  R   MO02JUN  CANPEK RR8   1000 1235          E                      
10.CAN/T CAN/T 020-87774512/CAN KONG YUAN CENTER/LIN HUAI JING ABCDEFG          
11.02086300366/CANXIN                                                           
12.T                                                                            
13.SSR FOID CZ HK1 NI360426198205040422/P7                                      
14.SSR FOID CZ HK1 NI420322198212165149/P8                                      
15.SSR FOID CZ HK1 NI433130198108084414/P6                                      
16.SSR FOID CZ HK1 NI452324198005020334/P5                                      
17.SSR FOID CZ HK1 NI42900181091876/P4                                          
18.SSR FOID CZ HK1 NI430421198104240026/P3                                      
19.SSR FOID CZ HK1 NI42220119781006011X/P2                                      
20.SSR FOID CZ HK1 NI362131791005094/P1 
.CS中是这样处理
用CANPEK RR8   中的8来提取:1~8后面的中文和NI/P1~NI/P8中间的证件用下面的应该再怎么改
   string sol = string.Empty; 
            MatchCollection m = Regex.Matches(textBox2.Text, @"(? <=HK)\d+(?=\s) ¦(? <=\s*\d+\.)[^\s]+(?=\s)", RegexOptions.IgnoreCase);             for (int  i = 1; i <=Convert.ToInt32(m[0].Value); i++) 
            { 
                sol +=  m[i].Value + Environment.NewLine; 
            } 
            this.textBox1.Text = sol; 
谢谢!!另谢谢HimeTale 明白了那么一点点正则表达不过还得再次请教.5555555555我太菜了

解决方案 »

  1.   

    不明白你为什么一个textbox就输入那么多内容,这样的设计就有问题吧
    为什么不分开输入呢
      

  2.   

    由于正则不能做数学计算,所以要分两步.
                string sol = string.Empty;
                MatchCollection m = Regex.Matches(textBox2.Text, @"(?<=\s*\d+\.)[\u4e00-\u9fa5]+(?=\s)|(?<=\sCANPEK\s+RR)\d+(?=\s)", RegexOptions.IgnoreCase);            int Count = Convert.ToInt32(m[m.Count - 1].Value); //此为CANPEK RR后面的数
                for (int  i = 0; i <Convert.ToInt32(m[m.Count-1].Value); i++)
                {
                    sol +=  m[i].Value + Environment.NewLine;
                }
                this.textBox1.Text = sol;  //此为所有的人名
                sol = string.Empty;
                MatchCollection m2 = Regex.Matches(textBox2.Text, @"(?<=\s\d+\..+NI)\d+(?=/P(?<No>\d+))", RegexOptions.IgnoreCase);
                for (int i = 0; i < m2.Count; i++)
                {
                    if (Convert.ToInt32(m2[i].Groups["No"].Value) <= Count)
                        sol += m2[i].Groups["No"].Value + " " + m2[i].Value + Environment.NewLine;
                }
                this.textBox1.Text += sol;  //此为所有的序号+证件号