使用非捕獲組。匹配成功,但輸出是不匹配的可選組的內容。
看到輸出,當你輸入包括像e-6
:
>>> re.findall(r'\d{1,4}:[-+]?\d+\.\d+(e-\d+)?', '1:0.00003 3:0.123456 8:-0.12345e-6')
['', '', 'e-6']
對於非捕獲組((?:...)
):
>>> re.findall(r'\d{1,4}:[-+]?\d+\.\d+(?:e-\d+)?', '1:0.00003 3:0.123456 8:-0.12345e-6')
['1:0.00003', '3:0.123456', '8:-0.12345e-6']
下面的是一些簡單的例子來說明如何捕獲小組的工作以及它們如何影響findall
的輸出。首先,沒有一個羣體:
>>> re.findall("a[bc]", "ab")
["ab"]
這裏,字符串「AB」匹配正則表達式,所以我們打印的一切正則表達式匹配。
>>> re.findall("a([bc])", "ab")
["b"]
這一次,我們把[bc]
捕獲組裏面,這樣即使整個字符串仍然由正則表達式匹配,findall
僅包括在其輸出中捕獲組內的部分。
>>> re.findall("a(?:[bc])", "ab")
["ab"]
現在,通過捕獲基團轉化爲一個非捕獲基,findall
再次使用其輸出的正則表達式整個的匹配。
>>> re.findall("a([bc])?", "a")
['']
>>> re.findall("a(?:[bc])?", "a")
['a']
在這兩個最後一種情況中,正則表達式作爲一個整體相匹配,因此,返回值是一個非空列表。在第一個中,捕獲組本身並不匹配任何文本,所以空字符串是輸出的一部分。第二,我們沒有捕獲組,所以整個正則表達式的匹配被用於輸出。
什麼是'1:0.00003 3:0.123456 8:-0.12345'?從哪裏抽取的字符串? – user2963623
http://www.regular-expressions.info/floatingpoint.html –
感謝您提供的信息 – daydayup