看板 Python 關於我們 聯絡資訊
請教一下,在用下面的例子學正規表示法時: import re text="how are you I am fine!" regex = r'(\w+)\s+(\w+)' re.sub(regex, r'\1', text) 不是應該先把text用空格切分為how和are、you和I、am和fine!等三部分。 然後再根據r'\1'挑選出上述前部分的前面那個單字,即how、you、am合併為'how you am' 怎麼執行的結果竟然把驚嘆號也給am,變成輸入為 'how you am!' (把r'\r'改為r'\2'的輸出就是符合預期的 'are I fine!' 說。) 不知道是哪裡理解有錯誤嗎?謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.129.144.87 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1761070647.A.2C8.html
penolove5566: 你這個觀察非常敏銳 。問題的關鍵在於: 10/22 09:00
penolove5566: re.sub() 並不是先把整個字串切分為多段、再各自取 10/22 09:00
penolove5566: 代;它是用滑動匹配 (greedy matching) 的方式,逐 10/22 09:00
penolove5566: 段依照正規表示式找到 所有匹配的「重疊區域」,並 10/22 09:00
penolove5566: 逐一取代。 10/22 09:00
penolove5566: 0-f0aa2b654319 10/22 09:05
CaptainH: 先match到"how are"→取代成"how" 10/22 12:38
CaptainH: 再match到"you I" → 取代為you 10/22 12:38
CaptainH: 最後match到"am fine"→取代為am 10/22 12:39
CaptainH: 剩下的"!"沒有處理,保留 10/22 12:39
CaptainH: 你的癥結應該是:\w只是[a-zA-Z0-9_], 不包括"!" 10/22 12:42
dosiris: 了解 學到寶貴一課 謝謝分享! 10/25 17:39