作者dosiris (希望大家開心)
看板Python
標題[問題] 關於正規表示法的r'\1'?
時間Wed Oct 22 02:17:25 2025
請教一下,在用下面的例子學正規表示法時:
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://webptt.com/m.aspx?n=bbs/Python/M.1761070647.A.2C8.html
1F:推 penolove5566: 你這個觀察非常敏銳 。問題的關鍵在於: 10/22 09:00
2F:→ penolove5566: re.sub() 並不是先把整個字串切分為多段、再各自取 10/22 09:00
3F:→ penolove5566: 代;它是用滑動匹配 (greedy matching) 的方式,逐 10/22 09:00
4F:→ penolove5566: 段依照正規表示式找到 所有匹配的「重疊區域」,並 10/22 09:00
5F:→ penolove5566: 逐一取代。 10/22 09:00
7F:→ penolove5566: 0-f0aa2b654319 10/22 09:05
8F:→ CaptainH: 先match到"how are"→取代成"how" 10/22 12:38
9F:→ CaptainH: 再match到"you I" → 取代為you 10/22 12:38
10F:→ CaptainH: 最後match到"am fine"→取代為am 10/22 12:39
11F:→ CaptainH: 剩下的"!"沒有處理,保留 10/22 12:39
12F:→ CaptainH: 你的癥結應該是:\w只是[a-zA-Z0-9_], 不包括"!" 10/22 12:42
13F:→ dosiris: 了解 學到寶貴一課 謝謝分享! 10/25 17:39