Skip to content

建立 2026-09-15 更新 2026-09-15

批次取代

re.sub 適合「整份文字照規則改」。改完仍是字串,不會幫你驗證語意。

把各種空白收成單一空白

import re

messy = "標題\t\t內容\n\n下一行   還有空格"
print(re.sub(r"[ \t]+", " ", messy))
print(re.sub(r"\n{3,}", "\n\n", messy))  # 連續空行最多留一個

日期改格式

import re

text = "截止 2026-09-15,補件 2026-10-01。"
print(re.sub(
    r"(?P<y>\d{4})-(?P<m>\d{2})-(?P<d>\d{2})",
    r"\g<d>/\g<m>/\g<y>",
    text,
))
# 截止 15/09/2026,補件 01/10/2026。

遮罩信用卡中間碼

import re

def mask_card(m: re.Match) -> str:
    digits = re.sub(r"\D", "", m.group(0))
    return digits[:4] + "*" * (len(digits) - 8) + digits[-4:]

raw = "卡號 1234-5678-9012-3456 請勿外流"
print(re.sub(r"\d{4}(?:[-\s]?\d{4}){3}", mask_card, raw))
# 卡號 1234********3456 請勿外流

示範用。真正處理付款資料要走 PCI 規範,不要自己用 regex 存卡號。

把 Markdown 粗體標籤拿掉

import re

md = "這是 **重要** 與 **也很重要** 的句子。"
print(re.sub(r"\*\*(.+?)\*\*", r"\1", md))
# 這是 重要 與 也很重要 的句子。

懶惰量詞 .+? 避免一次吃到最後一個 **。巢狀粗體仍會壞掉;完整 Markdown 請用剖析器。

敏感詞換成相同長度的星號

import re

def stars(m: re.Match) -> str:
    return "*" * len(m.group(0))

policy = re.compile(r"密碼|口令", re.IGNORECASE)
print(policy.sub(stars, "請勿把密碼寫在聊天室"))

中文沒有大小寫,re.I 對它們沒差別;對英文關鍵字才有用。

相關資料