python re.sub 如何找到符合規則字串替換並且保留一部分原始字串?
在 Python 中,re.sub
支援透過捕獲群組(capture groups)來保留部分原始字串。可以使用正則表達式中的括號 ()
來定義捕獲群組,然後在替換字串中使用 \1
、\2
等來引用對應群組的內容。
以下是具體範例:
範例 1:基本用法
假設我們有一段文字,需要將某些部分替換,但保留其他部分。
import re text = "Hello, my name is John." # 替換 "John" 為 "Mike",但保留其他文字 result = re.sub(r"(my name is )(\w+)", r"\1Mike", text) print(result) # 輸出: "Hello, my name is Mike."
說明
- 正則表達式:
(my name is )
:捕獲固定的文字my name is
。(\w+)
:捕獲名字(由字母組成的一個單詞)。
- 替換字串:
\1
:引用第一個捕獲群組,即my name is
。Mike
:替換第二個捕獲群組為Mike
。
範例 2:使用動態替換
若替換邏輯較為複雜,可用函數替換。
def replace_func(match): name = match.group(2) # 取得第二個群組 (名字) return f"{match.group(1)}{name.upper()}" # 保留第一群組並將名字轉為大寫 text = "Hello, my name is John." result = re.sub(r"(my name is )(\w+)", replace_func, text) print(result) # 輸出: "Hello, my name is JOHN."
範例 3:多處替換並保留部分字串
將日期格式從 YYYY-MM-DD
轉為 MM/DD/YYYY
。
text = "The event is on 2024-12-03." # 匹配 YYYY-MM-DD 格式 result = re.sub(r"(\d{4})-(\d{2})-(\d{2})", r"\2/\3/\1", text) print(result) # 輸出: "The event is on 12/03/2024."
說明
(\\d{4})
:捕獲年份。(\\d{2})
:捕獲月份和日期。- 替換字串
\2/\3/\1
:\2
為月份。\3
為日期。\1
為年份。
這種方法既能替換字串,又能保留原始內容的一部分,非常靈活!
留言板
歡迎留下建議與分享!希望一起交流!感恩!