2013-05-09 2 views
1

У меня есть строка, в которой я должен найти номер PNR. Чтобы получить номер PNR, я должен проверить два условия:Как совместить два условия на одной строке, чтобы получить один вывод с использованием regex

Первый пассажир должен быть более одного.

Вторая строка содержит МАРШРУТ, ВОЗОБНОВЛЯЕМЫЕ.

Если оба условия выполнены, то извлекать только номер PNR из строки, иначе ничего не возвращать.

Мой код, в котором я полностью заполняю свое первое условие.

public DataTable GetPnr(List<string> request) // Here we create the function for get pnr. 
{ 
    dt.Columns.Add("PNR", typeof(string)); 
    foreach (string data in request) 
    { 
     string item = data; 
     dr = dt.NewRow(); 
     if (item.ToLower().Contains("itinerary rebooked") || item.ToLower().Contains("itineraryrebooked")) // Condition for operated by cases 
     { 
      Regex regexs = new Regex(@"(\s[A-Z0-9]{6}\s{2})"); // Regular operation for PNR. 
      foreach (Match m in regexs.Matches(item)) 
      { 
       output = m.ToString(); // Here we store the PNR value in output string variable. 
      } 
      dr["PNR"] = output; 
      dt.Rows.Add(dr); 
     } 
    } 
    return dt; 
} 

Теперь дело, когда я использую регулярное выражение Chech для нескольких пассажиров в то же регулярное выражение, которое я использую в своей функции не возвращает мне никакого вывода

здесь моя строка, для которой я хочу и условие для проверки:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    List<String> YMT1 = new List<String>(); 
    string ymt = @"RT29WHVE 

RP/NYC1S21DD/NYC1S21DD   WS/SU 6MAY13/0503Z 29WHVE //29WHVE is the PNR number     
NYC1S21DD/9525GY/6MAY13               
    1.KHOON/FRANCIS 2.MEH/SAY 3.MEH/PRAY 4.MEH/MAW       
    5.REH/LAW 6.REH/PAE 7.REH/DO 8.REH/LEE 9.REH/HEH      
10 US 152 T 12MAY 7 GEGPHX HK9 300P 534P 12MAY E US/A4PRHM     
11 US 184 T 12MAY 7 PHXLAS HK9 815P 923P 12MAY E US/A4PRHM     
12 US 392 K 13MAY 1 LASCLT HK9 115A 827A 13MAY E US/A4PRHM     
13 US4286 K 13MAY 1 CLTFAY HK9 955A1050A 13MAY E US/A4PRHM     
OPERATED BY SUBSIDIARY/FRANCHISE           
14 MIS 1A HK9 NYC 11JAN-THANK YOU FOR YOUR BUSINESS        
15 AP NYC9103161516                
16 APE [email protected]             
17 TK OK06MAY/NYC1S21DD//ETU 
FXR               
01 KHOON/FRANC*                 
ITINERARY REBOOKED                
LAST TKT DTE 06MAY13 - SEE ADV PURCHASE "; 

    string ymt2 = @"RP/NYC1S21DD/NYC1S21DD   UA/RM 6MAY13/0452Z  298BFB     
NYC1S21DD/9999WS/6MAY13               
1.BELIEU/KENNETH E(ADT) 2.BELIEU/RUTH J(ADT)        
3 UA 646 Q 22JUN 6*PDXORD HK2 603A1150A 22JUN E UA/GW0LVJ    
4 UA1735 Q 22JUN 6*ORDBWI HK2 115P 409P 22JUN E UA/GW0LVJ    
5 UA 209 S 01JUL 1*BWIIAH HK2 545A 800A 01JUL E UA/GW0LVJ    
6 UA 258 S 01JUL 1*IAHPDX HK2 856A1120A 01JUL E UA/GW0LVJ    
)>FXR                     
01 BELIEU/KENNE*                
NO REBOOKING REQUIRED FOR LOWEST AVAILABLE FARE         
LAST TKT DTE 07MAY13 - SEE ADV PURCHASE"; 

    string ymt3 = @"RP/NYC1S21DD/NYC1S21DD   WS/SU 6MAY13/0509Z Y33ORG //Y33ORG is the PNR number    
NYC1S21DD/80948W/6MAY13               
1.CORTES RIVERA/MARIA(ADT)            
2 UA1162 W 21JUN 5*BQNEWR HK6 150A 545A 21JUN E UA/GW176R    
3 UA1209 W 21JUN 5*EWRLAX HK6 700A 955A 21JUN E UA/GW176R    
4 UA 398 V 17JUL 3 LAXEWR HK6 1040A 705P 17JUL E UA/GW176R  ";  

    YMT.Add(ymt); 
    YMT.Add(ymt2); 
    YMT.Add(ymt3); 
    Split sp = new Split(); 
    DataTable dt = sp.GetPnr(YMT); 
} 

по моему коду я беру все те PNR, которые содержат МАРШРУТ краснокнижных, но я также хочу, если у меня есть только один чел с МАРШРУТА перебронирован, то он не закачает, что PNR номер как в ymt3 У меня МАТЕРИАЛЬНО ЗАПИСАН состояние, но только один человек и поэтому я не хочу, чтобы принять PNR номер

ответ

1

Попробуйте этот код ...

public DataTable GetPNR(List<string> Request) // Here we create the function for get pnr. 
    { 
     dt.Columns.Add("PNR", typeof(string)); 

     foreach (string data in Request) 
     { 
      string item = data; 
      dr = dt.NewRow(); 

      Regex regex = new Regex(@"(\d+\.[a-zA-Z]\S(.+))", RegexOptions.IgnoreCase | RegexOptions.Compiled); 
      foreach (Match m in regex.Matches(item)) 
      { 
       name = m.ToString(); 
      } 

      if((item.ToLower().Contains("itinerary rebooked") || item.ToLower().Contains("itineraryrebooked"))&&name!=null) // Condition for operated by cases 
      { 
       Regex regexs = new Regex(@"(\s[A-Z0-9]{6}\s{2})"); // Regular operation for PNR. 
       foreach (Match m in regexs.Matches(item)) 
       { 
        output = m.ToString(); // Here we store the PNR value in output string variable. 
       } 


      } 
      dr["PNR"] = output; 
      dt.Rows.Add(dr); 
     } 
     return dt; 
    }`enter code here` 
+0

Благодаря спариванию, но регулярное выражение вы дали мне используется как для множественного, а также одного пассажира мне нужен регулярное выражение, которое забирает только мулифицированного пассажира и избегает одиночного пассажира – amitesh

Смежные вопросы