[問題] 關於正規表示法的r'\1'?

看板Python作者 (希望大家開心)時間10小時前 (2025/10/22 02:17), 編輯推噓1(106)
留言7則, 1人參與, 3小時前最新討論串1/1
請教一下,在用下面的例子學正規表示法時: 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

10/22 09:00, 3小時前 , 1F
你這個觀察非常敏銳 。問題的關鍵在於:
10/22 09:00, 1F

10/22 09:00, 3小時前 , 2F
re.sub() 並不是先把整個字串切分為多段、再各自取
10/22 09:00, 2F

10/22 09:00, 3小時前 , 3F
代;它是用滑動匹配 (greedy matching) 的方式,逐
10/22 09:00, 3F

10/22 09:00, 3小時前 , 4F
段依照正規表示式找到 所有匹配的「重疊區域」,並
10/22 09:00, 4F

10/22 09:00, 3小時前 , 5F
逐一取代。
10/22 09:00, 5F

10/22 09:05, 3小時前 , 6F

10/22 09:05, 3小時前 , 7F
0-f0aa2b654319
10/22 09:05, 7F
文章代碼(AID): #1ezyutB8 (Python)
文章代碼(AID): #1ezyutB8 (Python)