基本上,我想寫一個正則表達式來匹配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') –