比如有 
007     TTTTTT 9983 0641 85JUL /6                                                
     1.陈号(001) 2.陈瑞(001) 3.孙海(001) 4.田松(001)                        
     5.张涛红(001) TTTTT
001 10.SSR FOID GS HK1 NI522225198218842019/P4                                  
       HK(001)                                                                  
001 11.SSR FOID GS HK1 NI522221196745042478/P1                                 +
001 12.SSR FOID GS HK1 NI527421196212300018/P5                                 -
       HK(001)                                                                  
001 13.SSR FOID GS HK1 NI522224197174230058/P2                                  
       HK(001)                                                                  
001 14.SSR FOID GS HK1 NI522289196410290034/P3                                  
       HK(001) 我要如何获取姓名及姓名相应的身份证,这里面陈号的身份证在“NI522221196745042478/P1”这一栏,身份证/P2是第二个姓名,其他以此推。
c#正侧表达式截取字符串.netwinform

解决方案 »

  1.   

    void Main()
    {
    string str=@"007     TTTTTT 9983 0641 85JUL /6                                                
     1.陈号(001) 2.陈瑞(001) 3.孙海(001) 4.田松(001)                        
     5.张涛红(001) TTTTT
    001 10.SSR FOID GS HK1 NI522225198218842019/P4                                  
       HK(001)                                                                  
    001 11.SSR FOID GS HK1 NI522221196745042478/P1                                 +
    001 12.SSR FOID GS HK1 NI527421196212300018/P5                                 -
       HK(001)                                                                  
    001 13.SSR FOID GS HK1 NI522224197174230058/P2                                  
       HK(001)                                                                  
    001 14.SSR FOID GS HK1 NI522289196410290034/P3                                  
       HK(001) ";
       Regex reg=new Regex(@"(?is)((?<id>\d+)\.(?<name>\w+)\(\d+\)\s+)+.*?(NI(?<card>\d{18}|\d{17}X)/P(?<p>\d+)((?!NI).)*)+");
       Regex regName=new Regex(@"(?<=(\d+)\.)\w+(?=\()");
     
       foreach(Match m in reg.Matches(str))
       {
         string id="P";
     foreach(Capture c in m.Groups[1].Captures)
     { 
       Match m1=regName.Match(c.Value);
       Console.Write(m1.Value);
        id=m1.Groups[1].Value;
    foreach(Capture c2 in m.Groups[2].Captures)
      { 
      Regex regCard=new Regex(@"(?<=NI)((?<card>\d{18}|\d{17}X))(?=/P"+id+")");
      Console.Write("   "+regCard.Match(c2.Value).Value);
       }
       Console.WriteLine();
     } 
       }
       
       /*
        陈号      522221196745042478         
    陈瑞      522224197174230058   
    孙海      522289196410290034
    田松      522225198218842019            
    张涛红    527421196212300018     
       */
       
    }