當試圖在Python中做一些正則表達式匹配時,我偶然發現了一個奇怪的問題。我想匹配表單xxx.yyy上的十進制數,並將它們分成三組進行進一步處理。我跑了類似下面的代碼片段。Python的正則表達式不夠貪婪,多個組
#!/usr/bin/env python3
import re
matches = re.search("a=(\d+)(\.?)(\d+?)", "var k = 2;var a; a=46")
print(matches.group(1))
打印返回4,而46將是預期的結果。爲什麼會這樣? Python文檔指出regexp +和*是貪婪的,但這似乎並不是這種情況。原因似乎是最後一位數字在最後一組中結束。我需要至少匹配第一組和最後一組。如果我使用最後一個來區分十進制數和非十進制數,我可以跳過中間組。
但是,如果匹配的數字是小數,它似乎工作。
#!/usr/bin/env python3
import re
matches = re.search("a=(\d+)(\.?)(\d+?)", "var k = 2;var a; a=46.3")
print(matches.group(1))
打印46.如果你能幫我解決這個難題,我會很高興。謝謝。
做了一些評估,我相信這個答案是最接近我想達到的目標。謝謝@Daniel。 – Fakenick