亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

match()和group()一些疑問,如下所示:

match()和group()一些疑問,如下所示:

莫回無 2023-04-04 21:17:38
m = re.match(r"(..)+", "a1b2c3")  # Matches 3 times.m.group(1)                        # Returns only the last match.'c3'm.group(0)'a1b2c3'm.groups() ('c3',)注意到pattern中的+,應該是匹配偶數個字符.1.首先是match的問題.match是從開頭匹配,為什么會匹配到c3呢?2.group(0)是整個匹配項,為什么groups()中沒有呢?
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

1) 從group的角度考慮,整個表達式應該寫作((..)+)。所以最高一層group(0)匹配整個字符串。
2) 先說第二個問題,按照文檔的描述的行為,group()是列出從編號1開始的所有group,而給定的表達式只有一個group,所以自然就是c3了
3) 好,最后是為什么group(1)是c3。如果你的正則表達式沒有那個“+”,那么它就只匹配a1。而有了“+”之后,每匹配到一個“(..)”就會放到group(1)中。所以跑完整個字符串,group(1)就存進了c3

我猜你其實想問“字符串中明明有三個符合(..)的,但為什么只出現了最后一個呢?”原因是,group說的是正則表達式中的括號,而不是字符串中符合括號內pattern的子串。


查看完整回答
反對 回復 2023-04-07
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

我也是正則苦手, T_T

re.compile(r".{2}").findall("a1b2c3")


查看完整回答
反對 回復 2023-04-07
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

1.首先是match的問題.match是從開頭匹配,為什么會匹配到c3呢?
首先不考慮捕獲的問題,去掉捕獲的(?:..)+是匹配2個任意字符的多個子串,當然可以匹配到c3.
2.group(0)是整個匹配項,為什么groups()中沒有呢?
需要從表達式的解析說起,表達式的字面義上看只有一對括號,因此(..)+只有1個group(1)的捕獲組,每次捕獲都存在1號捕獲組。
而group(0)的實現是把歷史匹配過成功的字符串返回,與捕獲組無關:

>> m = re.match(r"(..)..(..)", "a1b2c3")
>> m.groups()


('a1', 'c3')

>> m.group(0)


'a1b2c3'
而groups的實現其實是group(1-99),因此group只支持到99個。因此groups也只有一個捕獲組的內容會給你:)


查看完整回答
反對 回復 2023-04-07
  • 3 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號