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

时间:2014-06-17 10:23:49

标签: c# asp.net regex

你好编码员我有一个声明字符串,我必须只获取其中的状态

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 前面我不想要怎么才能得到ST而不是出现在FARE之后。

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:2)

你知道,我们只是猜测,但那是什么:

^\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]);

答案 1 :(得分:2)

嗨塞缪尔和anurag感谢您对anurag的正则表达的帮助以及塞缪尔的想法我做了一些改变并得到了我想要的东西。这是我的代码:

string foo = @"

TKT-2207434010779-780 RCI- 1A LOC-68XMG5
OD-HOUHOU SI- FCMI-F POI-NYC DOI-02JUN14 IOI-10729143

1.WAHBA/REDA ADT ST
1 OIAH LH7620UA L 07JUN2050 OK LHHNC5N/CN05 F 07JUN07JUN 1PC
2 XLHR LH 911 L 08JUN1645 OK LHHNC5N/CN05 F 08JUN08JUN 1PC
3 XFRA LH 584 L 08JUN2130 OK LHHNC5N/CN05 F 08JUN08JUN 1PC
4 OCAI LH 585 L 06JUL0340 OK LHHNC5N/CN05 O 06JUL06JUL 1PC
5 XFRA LH 440 L 06JUL1000 OK LHHNC5N/CN05 O 06JUL06JUL 1PC
IAH
FARE F USD 522.00
TOTALTAX USD 656.80
TOTAL USD 1178.8
";

StringReader reader = new StringReader(foo);
string line;
List<string> list = new List<string>();
while (null != (line = reader.ReadLine()))
{
   Regex r = new Regex(@"^\s\d.+?\W{1}([A-Z]) \W{2}", RegexOptions.Multiline);
   if(r.IsMatch(line)){
   MatchCollection m = r.Matches(line);
   string value = m[0].Groups[1].ToString();
   list.Add(value); 
   }
  }

答案 2 :(得分:0)

^\d+\s+\w+\s+\w+\s+\w+\s+\w \w+ \w+ \w+\s+(?<YourVar>\w+)

这样可行。但很难用一个样本创建一个reg表达式。使用上面的正则表达式时,每个匹配应包含一个名为“YourVar”的组,其中包含所需的值

答案 3 :(得分:0)

我在我的代码中检查了以下内容并且它正在运行。

Regex.Match(s, @"\W{2}([A-Z])\W{2}").Value.Trim()