如何从字符串中识别IATA或ICAO代码

时间:2018-09-13 15:03:08

标签: c# regex replace split

我正在开发与航班相关的API,因此我需要拆分承运人代码和所接收代码的航班号。例如:

UA775 -> UA and 775

这种情况是微不足道的。但是有多种类型的IATA和ICAO代码,我确定的模式是:

letter letter letter     {digit}+
letter digit             {digit}+
digit letter             {digit}+

因此,三个字母然后是一堆数字,一个字母和一个数字,然后是一堆数字或一个数字,然后是一个字母,然后是一堆数字。在最后两种情况下,它应该像这样工作:

X3567 -> X3 and 567
5U9997 -> 5U and 9997

在Regex匹配的帮助下,有没有办法在c#中做到这一点?当前这是我的代码,缺少最后两种情况:

// e.g:
carrierAndFlightNumber = "X3567";

Regex regex = new Regex(@"([a-zA-Z]+)(\d+)");
Match result = regex.Match(carrierAndFlightNumber);
string carrier = result.Groups[1].Value;
string flightNumber = result.Groups[2].Value;

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用

@"^([A-Za-z]{3}|[A-Za-z][0-9]|[0-9][A-Za-z])([0-9]+)$"

请参见regex demo

详细信息

  • ^-字符串的开头
  • ([A-Za-z]{3}|[A-Za-z][0-9]|[0-9][A-Za-z])-第1组:
    • [A-Za-z]{3}-3个字母
    • |-或
    • [A-Za-z][0-9]-一个字母和一个数字
    • |-或
    • [0-9][A-Za-z]-一个数字和一个字母
  • ([0-9]+)-第2组:1个以上数字
  • $-字符串的结尾。