Как идентифицировать коды IATA или ICAO из строки - PullRequest
0 голосов
/ 13 сентября 2018

Я разрабатываю API, связанный с полетом, и мне нужно разделить код перевозчика и номер рейса получаемого кода.Например:

UA775 -> UA and 775

этот случай тривиален.Но существуют различные виды кодов ИАТА и ИКАО, и я определил следующие шаблоны:

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

Итак, три буквы, затем набор цифр, буква и цифра, а затем набор цифр или цифра.затем письмо, а затем куча цифр.В последних двух случаях это должно работать так:

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

Есть ли способ, которым я могу сделать это в c # с помощью сопоставления Regex?В настоящее время это мой код, который пропускает два последних случая:

// 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;

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Без использования регулярных выражений вы можете использовать простую процедуру, которая идентифицирует ваши три случая:

using System;
using System.Linq;

namespace IdentifyIATA
{
    public static class Iata
    {
        public static Tuple<string,string> CodeIdentifier(string code)
        {
            var first = code.Substring(0, 3);
            if (first.All(char.IsLetter)){
                return new Tuple<string, string>(first, code.Substring(3));
            }
            return new Tuple<string, string>(code.Substring(0, 2), code.Substring(3));
        }
    }
}

Первый элемент кортежа возвращает первую часть вашего кода, а второй - второй: я использовал эту маленькую программу для проверки:

using System;

namespace IdentifyIATA
{
    class Program
    {
        static void Main(string[] args)
        {
            var result = Iata.CodeIdentifier(args[0]);
            Console.WriteLine($"Code: {result.Item1}, {result.Item2} ");
            Console.ReadLine();
        }
    }
}
0 голосов
/ 13 сентября 2018

Вы можете использовать

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

См. Демоверсию regex

Детали

  • ^ - начало строки
  • ([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+ цифр
  • $ - конец строки.
...