正则表达式以匹配航班号

Owe*_*wen 3 regex

基本上,我想编写一个正则表达式来匹配格式AA123或的航班号AA1234

\b[A-Z]{2}\d{3,4}\b
Run Code Online (Sandbox Code Playgroud)

那是两个字母加上3或4位数字。我的解决方案和结果如图所示。我不明白为什么省略单词之间的空格会失败。

Wik*_*żew 5

正如卢卡斯在评论中提到的,边界这个词\b解释了当航班代码周围没有空格时您的正则表达式会失败的事实。

由于您在 Python 中使用该模式,因此可以使用环视来限制该模式的封闭上下文。比如说,如果模式前面没有大写字母(因为它应该以大写字母开头)并且后面不应该有数字(因为它应该以数字结尾),则该模式应该匹配。

在你的情况下使用

(?<![A-Z])[A-Z]{2}\d{3,4}(?!\d)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

(?<![A-Z])如果两个航班号大写字母之前有一个大写字母,并且(?!\d)负向前查找将导致匹配失败。

其他航空公司代码正则表达式注意事项

由于航空公司代码可能比这更复杂,也包含字母,但开头不仅仅是 2 位数字,并且前 2 个字符之后可能有一个可选空格,最后的数字可能是 2 到 4,请考虑使用

(?<![\dA-Z])(?!\d{2})([A-Z\d]{2})\s?(\d{2,4})(?!\d)
Run Code Online (Sandbox Code Playgroud)

请参阅另一个正则表达式演示

细节

  • (?<![\dA-Z])- 当前位置之前没有字母或数字
  • (?!\d{2})- 当前位置右侧不允许有 2 位数字
  • [A-Z\d]{2}- 2位数字或字母
  • \s?- 可选的空白
  • \d{2,4}- 两位、三位或四位数字
  • (?!\d)- 不允许紧邻当前位置右侧的数字。


小智 5

实际上,航空公司代码可能包含数字。例如:S7

因此,更好的正则表达式将是

\b([A-Z]{2}|[A-Z]\d|\d[A-Z])\s?\d{3,4}\b

如果您真的需要查找没有空格的字符串中的航班号。(区分大小写)第一个负向后查找和最后一个非数字组用作边界。

(?<!([A-Z0-9]))(([A-Z]{2}|[A-Z]\d|\d[A-Z])\s?\d{3,4})(?:\D)