基本上,我想写一个正则表达式来匹配AA123
或AA1234
格式的航班号。正常表达式匹配航班号
\b[A-Z]{2}\d{3,4}\b
这是两个字母加3或4位数。我的解决方案和结果显示在图片中。我无法理解为什么它忽略了单词之间的空格。
结果与空间
Results without spacesdebuggex
基本上,我想写一个正则表达式来匹配AA123
或AA1234
格式的航班号。正常表达式匹配航班号
\b[A-Z]{2}\d{3,4}\b
这是两个字母加3或4位数。我的解决方案和结果显示在图片中。我无法理解为什么它忽略了单词之间的空格。
结果与空间
Results without spacesdebuggex
正如卢卡斯在评论中提到,字边界\b
账户的事实,你的正则表达式没有s时失败飞行代码周围的步伐。
由于您在Python中使用该模式,因此可以使用lookarounds来限制模式的封闭上下文。比如说,如果模式前面没有大写字母(因为它应该以大写字母开头),并且不应该跟随数字(因为它应该以数字结尾),则该模式应该匹配。
使用
(?<![A-Z])[A-Z]{2}\d{3,4}(?!\d)
如果前两个航班号大写字母大写字母,以及(?!\d)
负先行将失败的匹配(?<![A-Z])
负回顾后会失败匹配如果两个大写字母后面的3或4位数字后跟一个数字。
事实上,航空公司的代码可能包含数字。例如: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)
你regexp工作得最好。只有我必须使用\ d {2,4},因为一些尾号在其末尾只有两个数字。例如:FR69。 – manuman94
请将示例文本和模式添加到问题本身。 –
请在此处将您的代码添加到您的问题中,留下SO以查看与问题相关的内容应该是可选的,而不是必需的以帮助您。 – Jonast92
It *“failed”*由于在那里有字边界断言('\ b') –