如果re.findall() 函數在下列情況下未傳回預期結果,則可能會造成混亂:匹配一個字串。讓我們探討一下其在特定情況下行為背後的原因。
考慮以下來源字串:
s = r'abc123d, hello 3.1415926, this is my book'
且以下模式:
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
透過re.search,我們得到了正確的結果結果:
m = re.search(pattern, s) print(m) # <_sre.SRE_Match object; span=(3, 6), match='123'>
但是,re.findall回傳一個空白清單:
L = re.findall(pattern, s) print(L) # []
有兩個的關鍵面向考量:
要正確符合數值,請改用以下模式:
pattern = r'-?\d*\.?\d+'
此模式比對:
使用此修正後的模式,re.findall 將傳回預期清單:
['123', '3.1415926']
以上是為什麼當 `re.search()` 找到符合項目時 `re.findall()` 傳回空列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!