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

Regex 日期和三字母代码的正则表达式,regex,Regex,我一直在尝试创建一个正则表达式,它将从稍长的消息中解析日期和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

我一直在尝试创建一个正则表达式,它将从稍长的消息中解析日期和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
我希望能够匹配每封邮件的3个字母代码和日期。代码始终在日期附近,但可以在日期部分之前或之后。日期部分可以有年也可以没有年。是否可以有一个正则表达式用于所有上述示例

我从这个开始:

(\s[A-Z]{3}\d\d|\d\d[A-Z]{3}\s)
()但它没有发挥应有的作用,老实说,我对正则表达式不是很有经验

编辑:

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

AAA BBB 1A BY PEK14JUN18/1654 OR QQQ MF 812 XXXXX
AAA、BBB或QQQ的
。
与Y
TYO20JUL18/0355或CXL CA相同,所有QQQ
->仅
TYO
应匹配,因为它在日期之前,而
CXL
不应首先匹配。

这种交替
——意味着将匹配
\s[A-Z]{3}\d\d
\d[A-Z]{3}\s
,这肯定不是您想要的。要缩小备选方案的范围,请使用分组

我认为您应该非常直接地匹配这一点:

([A-Z]{3})\d{2}[A-Z]{3}\d{2}
这只捕获了一组中的三个字母。

首先

这种交替——意味着将匹配
\s[A-Z]{3}\d\d
\d[A-Z]{3}\s
,这肯定不是您想要的。要缩小备选方案的范围,请使用分组

我认为您应该非常直接地匹配这一点:

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

这只捕获一组中的三个字母。

请尝试以下正则表达式:

[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个字母。
您可以尝试它

尝试以下正则表达式:

[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个字母。
您可以试试它

您可以使用以下模式:

([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})
    捕获三个大写字母的组
你可以在现场试一试


捕获的组:

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`

您可以使用以下模式:

([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})
    捕获三个大写字母的组
你可以在现场试一试


捕获的组:

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`

这是一个很好的选择,但它没有抓住第三个和第四个选项。这是一个很好的选择,但它没有抓住第三个和第四个选项。