Я пытаюсь отличить номера рейсов.Отдельные символы и цифры, соответствующие определенным правилам
Example:
flightno = "FR556"
split_data = flightno.upcase.match(/([A-Za-z]+)(\d+)/)
first = split_data[1] # FR
second = split_data[1] # 556
Я затем перейти к запросу к базе данных, чтобы найти авиакомпанию на основе FR в этом примере и применять некоторую логику с результатом которой является Ryanair.
Моя проблема в том, когда номер рейса может быть:
flightno = "U21920"
split_data = flightno.upcase.match(/([A-Za-z]+)(\d+)/)
first = split_data[1] # U
second = split_data[1] # 21920
я в основном хочу первым, чтобы быть U2 не только U. Это используется для поиска в базе данных авиакомпании по их коду IATA в данном случае U2
**** EDIT ** В интересах ясности я сделал некоторые ошибки в терминологии, задавая свой вопрос. Из-за сложности номеров бронирования номера, вход берется из того, что предоставляет пассажир. Например, для полета easyJet пассажир может вводить EZY1920 или U21920, только авиакомпания предоставляет либо так, что пассажир действительно не знает.
«EZY» = ИКАО «U2» = ИАТА
Я беру входные данные от пользователя и попытаться отделить ИКАО или IATA с номером рейса «1920», но нет никакого способа определить, что без поиск в базе данных или разделение ввода, который я считаю громоздким с точки зрения пользователя.
Использование регулярного выражения для разделения символов от цифр работает до тех пор, пока пользователь не вводит IATA в качестве части номера своего рейса (пассажир не знает разницы), и, как вы можете видеть в приведенном выше примере, это смущает регулярное выражение. * *
Проблема в том, что я не могу думать о любом другом шаблоне с номерами рейсов. У них всегда есть как минимум два символа, состоящие из простых букв или смеси буквы и числа, и могут иметь длину 3 символа. Числа могут быть короткими, как 1, но также могут быть длиной 4 - всегда номерами.
**** Редактировать ** Как уже упоминалось в комментариях, нет фиксированного размера, однако одна вещь, которая всегда истинна (по крайней мере до сих пор), является первым символом, всегда будет буквой независимо от того, это ИКАО или ИАТА. Рассмотрев все введенные мной до сих пор данные, я задаюсь вопросом, может ли поиск базы данных и возвращение авиакомпаний с ИАТА или ИКАО, который соответствует первым двум буквам, предоставленным пользователем (U2), (FR), (EZ), может быть одним из способов однако это связано с очевидными проблемами, если должна быть выпущена ИКАО или ИАТА, которая соответствует другой авиакомпании, например «EZY» & «EZT». Это не будущее доказательство, и я ищу лучшие рубиновые или регулярные решения. **
Цените свой ввод.
EDIT
Я ответил на свой вопрос ниже. В то время как другие ответы предоставляют решение для обработки некоторых условий, которые они упадут, если номер полета начнется с номера, поэтому я разработал краткий, но на сегодняшний день стабильный способ анализа строки для цифр, а затем работать, если это ИКАО или ИАТА От этого.
@Wiktor Как он сказал, это не исправлено. ПО: Есть ли вероятность, что номер рейса можно будет сопоставить со списком всех возможных кодов ИКАО? –
Если ваш номер рейса содержит 2-значный код. вы можете разделить его на первые 2 цифры. – user100693
'/ ([A-Za-z] [A-Za-z \ d]) (\ d +) /' – mudasobwa