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."

說明

  1. 正則表達式
    • (my name is ):捕獲固定的文字 my name is
    • (\w+):捕獲名字(由字母組成的一個單詞)。
  2. 替換字串
    • \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."

說明

  1. (\\d{4}):捕獲年份。
  2. (\\d{2}):捕獲月份和日期。
  3. 替換字串 \2/\3/\1
    • \2 為月份。
    • \3 為日期。
    • \1 為年份。

這種方法既能替換字串,又能保留原始內容的一部分,非常靈活!