基本上,我想写一个正则表达式,以匹配格式为LongAccumulator
或AA123
的航班号。
AA1234
这是两个字母加上3或4位数字。我的解决方案和结果如图所示。我不明白为什么在省略单词之间的空格时会失败。
空格结果
Results without spaces debuggex
答案 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 designator
,flight number
和operational 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})$