喵喵時(shí)光機(jī)
2021-09-01 14:40:55
下面是我的代碼。我的理解是我的模式說(shuō)你必須滿足汽車和寵物是選項(xiàng)。即檢查單詞汽車和地毯?,F(xiàn)在重新搜索匹配地毯,這很好。但是 re.finall 輸出應(yīng)該是 ['carpet', 'car'],但它向我顯示 ['pet', ''] .請(qǐng)讓我知道我哪里不正確?import restring = "carpet and car"pattern = r'car(pet)?'print(re.search(pattern, string))print(re.findall(pattern, string))這是代碼的輸出:<_sre.SRE_Match object; span=(0, 6), match='carpet'>['pet', '']
2 回答

海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
用
pattern = r'car(?:pet)?'
反而。這?:使組無(wú)法捕獲(請(qǐng)參閱正則表達(dá)式語(yǔ)法文檔),這findall與它返回捕獲組列表(如果您的模式中存在捕獲組列表)完全不同:
>>> re.findall(pattern, "carpet and car")
['carpet', 'car']

DIEA
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
原因在以下re
文檔中findall()
提到:
以字符串列表的形式返回字符串中模式的所有非重疊匹配項(xiàng)。從左到右掃描字符串,并按找到的順序返回匹配項(xiàng)。如果模式中存在一個(gè)或多個(gè)組,則返回組列表;如果模式有多個(gè)組,這將是一個(gè)元組列表。結(jié)果中包含空匹配項(xiàng)。
如果您想要預(yù)期的結(jié)果,請(qǐng)使用finditer()
.
添加回答
舉報(bào)
0/150
提交
取消