Skip to main content
 首页 » 编程设计

c#之如何使用正则表达式仅选择状态

2024年02月06日33unruledboy

嗨,程序员们,我有一个语句字符串,我只需要获取其中的状态

TKT-2297433475972        RCI-                     1A  LOC-696L9U 
OD-NYCNYC  SI-      FCMI-K   POI-DCA  DOI-02JUN14  IOI-49881134 
1.SINGH/BALJINDER           ADT              ST 
1 OJFK KU 102   C 03JUN2145 OK CLRTUS5       F              2PC // Want this F 
2 XKWI KU 381   C 04JUN2230 OK CLRTUS5       F              2PC // Want this F 
3 ODEL KU 382   C 20JUN0555 OK CLRTUS5       O              2PC // Want this 0 
4 XKWI KU 117   C 20JUN0905 OK CLRTUS5       I   08JUN      2PC // Want this I 
JFK 
FARE     I          IT     // Don't want this I 
TOTALTAX USD       462.04 
TOTAL                  IT 
/FC NYC KU X/KWI KU DEL M/BT CLRTUS5 KU X/KWI KU NYC M/BT CLRTUS 
5 END XT5.50YC17.50US17.50US5.00XA7.00XY2.50AY1.60YX25.08IN11.51 
YM20.70IN3.65WO4.50XF JFK4.5 
 
TKT-0017434068283-284    RCI-                     1A  LOC-69DQPQ 
OD-AUSAUS  SI-      FCMI-I   POI-DCA  DOI-03JUN14                                 
1.MIMBELA/JAIME JOSE        ADT               ST 
1 OAUS AA 290   M 02JUL1005 OK MHXE1NA/CONS   O   02JUL02JUL 1PC // Want this 0 
2 XJFK AA  66   M 02JUL1730 OK MHXE1NA/CONS   O   02JUL02JUL 1PC // Want this 0 
3  BCN    ARNK 
4 OFCO AA 111   L 29JUL1115 OK LHXETNI4/CONS  O   29JUL29JUL 1PC // Want this 0 
5 XORD AA1398   L 29JUL2040 OK LHXETNI4/CONS  O   29JUL29JUL 1PC // Want this 0 
AUS 
FARE   I               IT// Don't want this I 
TOTALTAX USD       639.21 
TOTAL                  IT 

在上面的字符串中我只需要获取 ST

先这样

F 
F 
O 
I 

目前我正在使用这个正则表达式 (?:\s[A-Z]{1}\s\s)

通过使用此正则表达式,它还为我提供了 FARE 前面的 I 值,我不希望我如何只获得 ST 而不是 I 出现在 FARE 之后。

任何帮助将不胜感激

请您参考如下方法:

你知道,我们只是在猜测,但这有什么用:

^\d .+?\W{2}([A-Z]) \W{2} 

获取第二个匹配组

这是一个直观的解释:https://www.debuggex.com/r/kAjngGwRrsHQARYE

准确地说:这适用于忽略大小写,但更重要的是:必须设置多行开关,以便 ^ 匹配行的开头。

这是给你的C#代码

var foo = "1 OJFK KU 102   C 03JUN2145 OK CLRTUS5       F              2PC"; 
 
var r = new Regex(@"^\d .+?\W{2}([A-Z]) \W{2}",  RegexOptions.IgnoreCase | RegexOptions.Multiline); 
 
var m = r.Matches(foo); 
 
Console.WriteLine(m[0].Groups[1]);