re.findall 行為不一致
當嘗試使用re.findall 匹配字串中的數值時,一些用戶注意到了意外的行為。雖然 re.search 準確地檢索匹配項,但 re.findall 傳回一個空列表。這種明顯的差異可歸因於以下因素:
捕獲組和re.findall
要記住的一個關鍵點是,如果正規表示式模式包含捕獲組。如參考文獻中所定義,如果模式包含捕獲組,則 re.findall 返回組列表,對於具有多個組的模式可能採用元組的形式。值得注意的是,即使是空匹配也會包含在輸出中,除非它們緊接在另一個匹配之前。
非捕獲組和文字轉義
在提供的範例中,特定問題源自於在 r'' 字串文字中使用 \。此構造嘗試匹配文字 ,而不是匹配任何單個字元(換行符除外)的預期含義。要正確匹配數值,應將模式修改為:
-?\d*\.?\d+
此模式包括以下捕獲組:
示範
這是修改後的模式的IDEONE示範:
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L)
此模式正確檢索預期的數字匹配清單: ['123', '3.1415926'].
透過考慮捕獲組的性質以及文字轉義的適當用法,開發人員可以確保 re.findall 按其腳本中的預期運行。
以上是為什麼在 Python 中匹配數字時 `re.findall` 返回空列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!