用于匹配航班号的正则表达式

时间:2016-02-28 22:03:56

标签: regex

基本上,我想写一个正则表达式,以匹配格式为LongAccumulatorAA123的航班号。

AA1234

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

4 个答案:

答案 0 :(得分:4)

事实上,航空公司代码可能包含数字。例如: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)

答案 1 :(得分:2)

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

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

使用

(?<![A-Z])[A-Z]{2}\d{3,4}(?!\d)

请参阅regex demo

如果在两个航班号大写字母前面有一个大写字母,那么(?<![A-Z])否定后视将失败一个匹配,如果两个后面的3或4位数字,则(?!\d)否定前瞻将使匹配失败大写字母后跟一个数字。

答案 2 :(得分:1)

我没有适合您的正则表达式,但是我确实在网上找到了这条信息,这对阅读此信息的人可能非常有用。

我们所说的航班号实际上称为航班代号。该飞行指示符由三部分组成:airline designatorflight numberoperational suffix

这些部分具有以下格式:

  • 航空公司代码:XX(A)
  • 航班号:0(0)(0)(0)
  • 操作后缀:(A)

这里0代表任何数字,A代表字母,X代表任何一个。括号中的所有内容都是可选的。

因此,完整的航班代号的格式应为:XX(A)0(0)(0)(0)(A)source

在尝试检测一段文字中的航班号时要记住的几件事:

  • 航班代号不区分大小写。
  • 航班代号可以是 前面带有空格,换行或不加任何空格(开头为 串)。
  • 在空白处可以接续飞行指示符, 换行,没有任何内容(字符串的末尾)或任何非数字或 信件。
  • 航空公司标志和航班号部分通常用空格隔开。

希望这会有所帮助!

答案 3 :(得分:0)

该航班也只能包含BA1航班等1个号码。空白也应该是非捕获的:

^([A-Z]{3}|[A-Z\d]{2})(?:\s?)(\d{1,4})$