항공편 번호를 구별하려고합니다.특정 규칙에 따라 문자와 숫자가 구분됩니다.
Example:
flightno = "FR556"
split_data = flightno.upcase.match(/([A-Za-z]+)(\d+)/)
first = split_data[1] # FR
second = split_data[1] # 556
I는이 예에서 FR에 따라 항공사를 찾아 라이언 에어 인 결과 몇 가지 논리를 적용 할 데이터베이스를 쿼리로 이동.
항공편 번호가있을 때 내 문제는 다음과 같습니다
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입니다
**** 편집 ** 명확성을 위해 제 질문을 할 때 용어에 몇 가지 실수를했습니다. 예약 참조 번호의 복잡성으로 인해 승객이 제공 한 모든 정보가 입력됩니다. 예를 들어, easyJet 항공편의 경우 EZY1920 또는 U21920을 입력 할 수 있습니다. 따라서 승객은 무지하게됩니다.
"EZY"= ICAO "U2"= IATA는
나는 사용자로부터 입력을 받아 항공편 번호 "1920"에서 ICAO 또는 IATA을 분리하려고하지만, 결정하는 방법이 없습니다없이 그 데이터베이스를 검색하거나 필자가 느끼는 입력을 분리하는 것은 사용자 경험 관점에서보기가 번거롭다.
정규 표현식을 사용하여 숫자와 문자를 구분하면 사용자가 비행 번호의 일부로 IATA를 입력 할 때까지 (승객은 그 차이를 알 수 없습니다.) 위 예제에서 볼 수 있듯이 정규식이 혼란 스럽습니다. * *
문제는 비행 패턴이 다른 패턴을 생각할 수 없습니다. 그들은 항상 문자 또는 문자와 숫자의 혼합으로 구성된 적어도 두 개의 문자가 있으며 길이는 3 문자가 될 수 있습니다. 숫자 부분은 1만큼 짧을 수 있지만 4 - 항상 숫자도 가능합니다.
**** 편집 ** 주석에서 언급했듯이 고정 크기는 없지만 항상 (적어도 지금까지는) 하나의 사실은 첫 문자가 항상 문자 일 것입니다. ICAO 또는 IATA입니다. 지금까지 입력 한 모든 시체를 고려한 후 사용자 (U2), (FR), (EZ)가 제공 한 처음 두 글자와 일치하는 IATA 또는 ICAO를 사용하여 데이터베이스를 검색하고 항공사를 반환하는 것이 한 가지 방법 일지 궁금합니다. 그러나 이것은 예를 들어 "EZY"& "EZT"와 같이 다른 항공사와 일치하는 ICAO 나 IATA가 발표되어야하는 명백한 문제가 될 수 있습니다. 이것은 미래의 증거가 아니며 더 나은 루비 또는 정규식 솔루션을 찾고 있습니다 ** **
귀하의 의견을 감사드립니다.
편집
내가 아래에있는 내 자신의 질문에 대답했다. 다른 답변은 일부 조건을 처리하기위한 솔루션을 제공하지만 항공편 번호가 숫자로 시작되면 아래로 떨어지게되므로 숫자는 문자열을 분석하고 ICAO 또는 IATA 인 경우 안정적인 방식으로 계산합니다. 그것을 통해서. https://raw.githubusercontent.com/datasets/airport-codes/master/data/airport-codes.csv
당신에게 더 적절한 목록을 줄 수도 구글에서 함께 시간을 지출 :
@Wiktor 그가 말했듯이, 그것은 고쳐지지 않았습니다. PO : 가능한 모든 ICAO 코드 목록과 항공편 번호를 비교할 수 있습니까? –
모든 항공편 번호에 2 자리 숫자의 첫 번째 코드가 포함되어있는 경우. 처음 2 자리 숫자로 구분할 수 있습니다. – user100693
'/ ([A-Za-z] [A-Za-z \ d]) (\ d +) /' – mudasobwa