首頁 > 後端開發 > Python教學 > 為什麼在 Python 中匹配數字時 `re.findall` 返回空列表?

為什麼在 Python 中匹配數字時 `re.findall` 返回空列表?

Barbara Streisand
發布: 2024-12-27 01:20:10
原創
785 人瀏覽過

Why Does `re.findall` Return an Empty List When Matching Numbers in Python?

re.findall 行為不一致

當嘗試使用re.findall 匹配字串中的數值時,一些用戶注意到了意外的行為。雖然 re.search 準確地檢索匹配項,但 re.findall 傳回一個空列表。這種明顯的差異可歸因於以下因素:

捕獲組和re.findall

要記住的一個關鍵點是,如果正規表示式模式包含捕獲組。如參考文獻中所定義,如果模式包含捕獲組,則 re.findall 返回組列表,對於具有多個組的模式可能採用元組的形式。值得注意的是,即使是空匹配也會包含在輸出中,除非它們緊接在另一個匹配之前。

非捕獲組和文字轉義

在提供的範例中,特定問題源自於在 r'' 字串文字中使用 \。此構造嘗試匹配文字 ,而不是匹配任何單個字元(換行符除外)的預期含義。要正確匹配數值,應將模式修改為:

-?\d*\.?\d+
登入後複製

此模式包括以下捕獲組:

  • -? - 可選減號
  • 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板