2016-02-28 134 views
2

基本上,我想写一个正则表达式来匹配AA123AA1234格式的航班号。正常表达式匹配航班号

\b[A-Z]{2}\d{3,4}\b 

这是两个字母加3或4位数。我的解决方案和结果显示在图片中。我无法理解为什么它忽略了单词之间的空格。

+2

请将示例文本和模式添加到问题本身。 –

+0

请在此处将您的代码添加到您的问题中,留下SO以查看与问题相关的内容应该是可选的,而不是必需的以帮助您。 – Jonast92

+1

It *“failed”*由于在那里有字边界断言('\ b') –

回答

2

正如卢卡斯在评论中提到,字边界\b账户的事实,你的正则表达式没有s时失败飞行代码周围的步伐。

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

使用

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

regex demo

如果前两个航班号大写字母大写字母,以及(?!\d)负先行将失败的匹配(?<![A-Z])负回顾后会失败匹配如果两个大写字母后面的3或4位数字后跟一个数字。

1

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

因此更好的正则表达式是

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

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

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

+0

你regexp工作得最好。只有我必须使用\ d {2,4},因为一些尾号在其末尾只有两个数字。例如:FR69。 – manuman94