如何在同一字符串上匹配两个条件以使用正则表达式获得一个输出
本文关键字:正则表达式 输出 一个 条件 两个 字符串 | 更新日期: 2023-09-27 18:12:42
我有一个字符串,我必须找到PNR号码。要获得PNR号码,我必须检查两个条件:
第一乘客必须多于一个
第二个字符串包含重新预订的行程。
如果两个条件都满足,则只从字符串中提取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;
}
现在,当我使用正则表达式检查同一正则表达式中的多个乘客时我在函数中使用的是不返回任何输出
这是我想要检查两个条件的字符串:
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 FRANCISKHON@GMAIL.COM
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,但我也想如果我只有一个行程重新预订的pax,那么它不会获取PNR号码就像在t3中,我有行程重新预订条件,但只有一个人,所以我不想取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();
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`