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為年份。
這種方法既能替換字串,又能保留原始內容的一部分,非常靈活!

留言板
歡迎留下建議與分享!希望一起交流!感恩!