首頁 > 後端開發 > Python教學 > 為什麼「re.findall」會傳回空列表,而「re.search」在 Python 3.4.3 中可以正確使用相同的模式和字串?

為什麼「re.findall」會傳回空列表,而「re.search」在 Python 3.4.3 中可以正確使用相同的模式和字串?

Patricia Arquette
發布: 2024-12-22 20:57:10
原創
218 人瀏覽過

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall 行為異常

困境:

在使用 Python 3.4 的 Python腳本中.3、重新搜尋當使用指定模式套用於特定來源字串時,方法提供預期結果。然而,re.findall 莫名其妙地傳回相同模式和來源字串的空列表。

探索:

奇怪的是,儘管 re.findall方法似乎滿足從基於字串中提取匹配項的要求,但其行為卻出乎意料

解決方案:

經過仔細檢查,很明顯有兩個因素導致了這種奇怪的行為:

  • 模式構成:
    提供的模式包含有爭議的表達, r'.',旨在匹配轉義字符 () 後跟任何非換行符。但是,在 r'' 字串文字的上下文中,此表達式嘗試匹配文字 ,從而導致不正確的行為。
  • findall 行為:
    re. findall 方法期望模式包含捕獲組。如果不存在捕獲組,則傳回空字串。原始模式缺少捕獲組,導致無法捕獲所需的匹配項。

修正模式:

為了緩解此問題並成功提取匹配項,以下糾正模式應為就業:

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

解釋:

  • -?:可選減號
  • d *: 可選數字
  • .?: 可選小數分隔符號
  • d :一位或多位數字

演示:

利用修改後的模式, re.findall 方法現在可以準確檢索預期的匹配列表:

['123', '3.1415926']
登入後複製

以上是為什麼「re.findall」會傳回空列表,而「re.search」在 Python 3.4.3 中可以正確使用相同的模式和字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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