首頁 > 後端開發 > Python教學 > 為什麼「re.search」成功卻「re.findall」找不到字串中的數字?

為什麼「re.search」成功卻「re.findall」找不到字串中的數字?

Mary-Kate Olsen
發布: 2024-12-29 13:21:11
原創
834 人瀏覽過

Why Does `re.findall` Fail to Find Numbers in a String When `re.search` Succeeds?

re.findall 行為無法預測

原始字串和模式定義如下:

s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
登入後複製

理解問題

有兩個關鍵考慮因素在起作用這裡:

  1. 捕獲組: re🎜>
  2. 捕獲組:
  3. re .findall 僅在正規表示式模式包含捕獲組時提取並傳回捕獲的文字。
  4. 文字反斜線匹配:
模式中的 \ 嘗試匹配文字,而不是預期的。

正規表示式修改

pattern = r'-?\d*\.?\d+'
登入後複製
為了解決這個問題,我們可以修改模式以刪除多餘的捕獲組並正確匹配數字:

    此模式將符合:
  • -?d*:可選的減號和零個或多個數字
  • .?:可選小數分隔符號
d:一個或多個數字

結果

import re
L = re.findall(pattern, s)
print(L)  # Output: ['123', '3.1415926']
登入後複製
使用此修改後的模式,re.findall將產生預期的輸出:

以上是為什麼「re.search」成功卻「re.findall」找不到字串中的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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