Python 3.15 版本經理 Hugo van Kemenade 宣布,令人困惑的 re.match() 函數現已軟性棄用,並推薦使用更明確的 re.prefixmatch()。此變更釐清了該函數僅在字串開頭進行錨定,而不要求結尾也必須匹配的特性。這項 API 清晰度改進解決了開發人員對 Python 標準庫中正則表達式錨定行為的長期困惑。它代表了一種有意義的範式轉變,鼓勵新程式碼使用更具描述性的名稱,同時為現有程式碼保持向後相容性。軟性棄用意味著 re.match() 在未來版本中不會被移除,但已標記為「不應用於撰寫新程式碼」。開發人員應改用 re.search() 來匹配字串中的任何位置,或使用 re.fullmatch() 來匹配整個字串。

事件背景

Python 的正則表達式模組(re)歷史上包含了 match()、search() 和 fullmatch() 等函數。re.match() 函數專門檢查字串開頭是否匹配,這常讓使用者感到困惑,因為他們可能預期它像 Perl 的預設匹配行為,或將其與 fullmatch() 混淆。軟性棄用(於 PEP 387 中形式化)允許將 API 標記為新程式碼的過時選項,同時不安排將其移除。

社群觀察

社群普遍認為這是提升 API 清晰度的積極一步,許多開發者承認 re.prefixmatch() 對於該函數行為來說是一個更直觀的名稱。一些開發者指出,雖然 re.match() 正在被軟性棄用,但它仍在舊有程式碼庫中廣泛使用,因此軟性棄用的方式最適合將干擾降至最低。