re.findall 錯誤行為:不需要的空結果
在給定的場景中,雖然re.search() 成功提取了預期的數值「 123" 從來源字串,re.findall() 意外地產生了一個空結果。
經調查,罪魁禍首是r'\.'正規表示式模式的一部份。在原始字串(以 r 為前綴)中,\ 按字面意思處理,匹配反斜線字元後跟換行符之外的任何字元。但是,這不是捕捉浮點數的預期行為。
為了修正問題,修正後的模式 -?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中文網其他相關文章!