Python 正規表示式進階:一次搞懂「零寬斷言」四大象形心法 (?=…) 正向前瞻 (Positive Lookahead) ; (?!…) 負向前瞻 (Negative Lookahead) ; (?<=…) 正向回顧 (Positive Lookbehind) ; (?<!…) 負向回顧 (Negative Lookbehind)

加入好友
加入社群
Python 正規表示式進階:一次搞懂「零寬斷言」四大象形心法 (?=...) 正向前瞻 (Positive Lookahead) ; (?!...) 負向前瞻 (Negative Lookahead) ; (?<=...) 正向回顧 (Positive Lookbehind) ; (?<!...) 負向回顧 (Negative Lookbehind) - 儲蓄保險王

開篇:為什麼我們需要斷言?
在日常的文本處理中,我們常常遇到這樣的困境:

我們想要找到字串中的某個「特定位置」,但不想破壞或消耗原本的字串內容。
如果用傳統的 (群組) 把字元抓出來,替換時還得把這些字元再補回去,容易顯得囉唆。
這時,斷言(Assertion,或稱零寬度斷言) 就像是一把隱形的游標手術刀!它允許你在字串中設置「守衛」,它只負責檢查該位置的左右兩邊符不符合條件,但絕不會吃掉實際的字元。

核心速查表與象形記憶法
斷言的符號組合看起來就像顏文字般複雜 (?<=…),但其實這套語法藏著非常直觀的象形含義:

?:特殊指令起手式(這不是普通的群組括號!)
<:箭頭朝左,代表向左回顧 (沒有箭頭就是向右前瞻)
=:代表條件必須成立
!:代表條件絕對不能成立
四大斷言家族

Python 正規表示式進階:一次搞懂「零寬斷言」四大象形心法 (?=...) 正向前瞻 (Positive Lookahead) ; (?!...) 負向前瞻 (Negative Lookahead) ; (?<=...) 正向回顧 (Positive Lookbehind) ; (?<!...) 負向回顧 (Negative Lookbehind) - 儲蓄保險王

 實戰對決:如何拆解駝峰式命名 (CamelCase)?

假設我們有一個連續的程式碼字串 DauntlessFwUpdateProcessStep
我們的目標是把它拆開,變成有空格分隔的:Dauntless Fw Update Process Step

為此,我們需要找到小寫字母與大寫字母之間的「交界處」,並在那裡塞入一個空格。

🔪 老派做法:捕獲群組法 (Capturing Groups)

傳統做法是直接找字元,把它們吃進肚子裡,然後重新吐出來。

import re

text = "DauntlessFwUpdate"

# 尋找左邊小寫右邊大寫的字元組合找到後把兩個字都吃掉
# 替換:\1 吐出第一個吃掉的字母,\2 吐出第二個吃掉的字母中間補空格
result = re.sub(r'([a-z])([A-Z])', r'\1 \2', text)

print(result) # Dauntless Fw Update

限制:這種寫法步驟繁瑣,且因為涉及記憶體的存取與反向引用 (\1\2),有時在複雜的替換條件中會顯得笨重。

🪄 現代做法:零寬度斷言法 (Lookaround Assertions)

利用斷言語法,我們不再尋找「字元」,而是精準尋找「字元中間的無形縫隙」!

import re

text = "DauntlessFwUpdate"

# 尋找一個沒有寬度的縫隙
# 條件是游標往左看必須是小寫 (?<=[a-z]),並且往右看必須是大寫 (?=[A-Z])
# 替換直接在這個隱形縫隙中硬塞入一個空白字元 ' '
result = re.sub(r'(?<=[a-z])(?=[A-Z])', ' ', text)

print(result) # Dauntless Fw Update

優點:意圖極度精準且優雅!原字串的字母自始至終都沒有被「消耗」,我們只是找到那個完美的接縫處,將空白插入。

Python 正規表示式進階:一次搞懂「零寬斷言」四大象形心法 (?=...) 正向前瞻 (Positive Lookahead) ; (?!...) 負向前瞻 (Negative Lookahead) ; (?<=...) 正向回顧 (Positive Lookbehind) ; (?<!...) 負向回顧 (Negative Lookbehind) - 儲蓄保險王

總結

掌握正則表達式的斷言 (Lookaround) 功能後,你處理字串的思維會從「操作具體字元」,昇華為「操作隱形空間與邏輯條件」。下次當你發現自己寫了一堆括號 () 以及 \1\2\3 在做回補組裝時,不妨停下來回想這張「象形速查表」——試著用斷言,寫出更像頂尖駭客的優雅程式碼吧!

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python 正規表示式進階:一次搞懂「零寬斷言」四大象形心法 (?=...) 正向前瞻 (Positive Lookahead) ; (?!...) 負向前瞻 (Negative Lookahead) ; (?<=...) 正向回顧 (Positive Lookbehind) ; (?<!...) 負向回顧 (Negative Lookbehind) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *