2016-02-28 34 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