3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
1) 從group的角度考慮,整個(gè)表達(dá)式應(yīng)該寫作((..)+)。所以最高一層group(0)匹配整個(gè)字符串。
2) 先說(shuō)第二個(gè)問(wèn)題,按照文檔的描述的行為,group()是列出從編號(hào)1開始的所有g(shù)roup,而給定的表達(dá)式只有一個(gè)group,所以自然就是c3了
3) 好,最后是為什么group(1)是c3。如果你的正則表達(dá)式?jīng)]有那個(gè)“+”,那么它就只匹配a1。而有了“+”之后,每匹配到一個(gè)“(..)”就會(huì)放到group(1)中。所以跑完整個(gè)字符串,group(1)就存進(jìn)了c3
我猜你其實(shí)想問(wèn)“字符串中明明有三個(gè)符合(..)的,但為什么只出現(xiàn)了最后一個(gè)呢?”原因是,group說(shuō)的是正則表達(dá)式中的括號(hào),而不是字符串中符合括號(hào)內(nèi)pattern的子串。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
1.首先是match的問(wèn)題.match是從開頭匹配,為什么會(huì)匹配到c3呢?
首先不考慮捕獲的問(wèn)題,去掉捕獲的(?:..)+是匹配2個(gè)任意字符的多個(gè)子串,當(dāng)然可以匹配到c3.
2.group(0)是整個(gè)匹配項(xiàng),為什么groups()中沒有呢?
需要從表達(dá)式的解析說(shuō)起,表達(dá)式的字面義上看只有一對(duì)括號(hào),因此(..)+只有1個(gè)group(1)的捕獲組,每次捕獲都存在1號(hào)捕獲組。
而group(0)的實(shí)現(xiàn)是把歷史匹配過(guò)成功的字符串返回,與捕獲組無(wú)關(guān):
>> m = re.match(r"(..)..(..)", "a1b2c3")
>> m.groups()
('a1', 'c3')
>> m.group(0)
'a1b2c3'
而groups的實(shí)現(xiàn)其實(shí)是group(1-99),因此group只支持到99個(gè)。因此groups也只有一個(gè)捕獲組的內(nèi)容會(huì)給你:)
添加回答
舉報(bào)