代码之家  ›  专栏  ›  技术社区  ›  ohwelppp

日期和三字母代码的正则表达式

  •  0
  • ohwelppp  · 技术社区  · 6 年前

    我一直在尝试创建一个正则表达式,它可以从稍长的消息中解析日期和3个字母的代码。在这里,我将发布这些信息的示例以及我想要获得的信息:

    AAA BBB 1A BY PEK14JUN18/1654 OR QQQ MF 812 XXXXX -> PEK, 14JUN18/1654
    XXX/WWWW BY 05JUL 0900 BKK LT ELSE BKG WILL BE QQQQ -> BKK, 05JUL 0900
    TO AZ BY 02AUG 1910 TYO OR AZ WWWW WILL BE XXX -> TYO, 02AUG 1910
    BY TYO20JUL18/0355 OR CXL CA ALL QQQ -> TYO, 20JUL18/0355
    BY AMS04JUL18/1954 OR CXL MF 812 L07JUL -> AMS, 04JUL18/1954
    

    我从这个开始:

    (\s[A-Z]{3}\d\d|\d\d[A-Z]{3}\s)
    

    ( https://regex101.com/r/LPLjgf/1

    编辑:

    实际上,我只需要使用3个字母的代码,但我需要将它们与日期联系起来-例如:

    AAA BBB 1A BY PEK14JUN18/1654 OR QQQ MF 812 XXXXX
    

    AAA, BBB or QQQ 不应该匹配,因为它们不在日期之后/之前 PEK 与BY相同 TYO20JUL18/0355 OR CXL CA ALL QQQ ->仅限 TYO 应该匹配,因为它在约会之前 CXL 不应该。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Paolo Enigma    6 年前

    您可以使用以下模式:

    ([A-Z]{3})(\d{2}[A-Z]{3}\d{2}\/\d{4})|(\d{2}[A-Z]{3} \d{4}) ([A-Z]{3})
    
    • ([A-Z]{3})
    • (\d{2}[A-Z]{3}\d{2}\/\d{4}) 捕获两位数字的组,三个大写字母,两位数字, / ,四位数。
    • | 逻辑或,交替模式。
    • (\d{2}[A-Z]{3} \d{4}) 正在捕获组。捕获两位数、三个大写字母、空格和四位数。
    • ([A-Z]{3}) 捕获三个大写字母的组。

    你可以现场试一试 here


    捕获的组:

    Group 1.    14-17   `PEK`
    Group 2.    17-29   `14JUN18/1654`
    
    Group 3.    83-93   `05JUL 0900`
    Group 4.    94-97   `BKK`
    
    Group 3.    151-161 `02AUG 1910`
    Group 4.    162-165 `TYO`
    
    Group 1.    211-214 `TYO`
    Group 2.    214-226 `20JUL18/0355`
    
    Group 1.    269-272 `AMS`
    Group 2.    272-284 `04JUL18/1954`
    
    Group 1.    342-345 `PEK`
    Group 2.    345-357 `14JUN18/1654`
    
    Group 1.    378-381 `TYO`
    Group 2.    381-393 `20JUL18/0355`
    
        2
  •  0
  •   Richard    6 年前

    (\s[A-Z]{3}\d\d|\d\d[A-Z]{3}\s)
    

    交替 | \s[A-Z]{3}\d\d \d\d[A-Z]{3}\s 这当然不是你想要的。缩小交替使用分组的范围。

    我想你应该直接匹配这个:

    ([A-Z]{3})\d{2}[A-Z]{3}\d{2}
    

    这只包含了一组中的三个字母。

        3
  •  0
  •   Poul Bak    6 年前

    请尝试以下正则表达式:

    [A-Z]{3}(\d{2}[A-Z]{3}[\S]*)|(\d{2}[A-Z]{3}\s\d{4}\s[A-Z]{3})
    

    它将由2个数字组成3个字母,然后是3个字母或2个数字,然后是3个字母、1个空格、4个数字、1个空格和3个字母。 here