首頁 > 後端開發 > Python教學 > 為什麼在 Python 中匹配浮點數時 re.findall() 傳回空結果?

為什麼在 Python 中匹配浮點數時 re.findall() 傳回空結果?

Susan Sarandon
發布: 2024-12-22 07:07:10
原創
792 人瀏覽過

Why Does `re.findall()` Return Empty Results When Matching Floating-Point Numbers in Python?

re.findall 錯誤行為:不需要的空結果

在給定的場景中,雖然re.search() 成功提取了預期的數值「 123" 從來源字串,re.findall() 意外地產生了一個空結果。

經調查,罪魁禍首是r'\.'正規表示式模式的一部份。在原始字串(以 r 為前綴)中,\ 按字面意思處理,匹配反斜線字元後跟換行符之外的任何字元。但是,這不是捕捉浮點數的預期行為。

為了修正問題,修正後的模式 -?d*.?d 遵循以下原則:

  • -?匹配可選的減號。
  • d* 符合可選的數字。
  • .?符合可選的小數分隔符號。
  • d 符合一個或多個數字。

使用此修訂後的模式,re.findall() 現在可以正確識別來源字串中的數值:

import re

s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)  # Output: ['123', '3.1415926']
登入後複製

請記住,要使re.findall () 傳回不捕獲組的匹配值,模式必須不含任何捕獲組或非捕獲組(例如,(?:)),除非模式中存在反向引用。

以上是為什麼在 Python 中匹配浮點數時 re.findall() 傳回空結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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