python的re.sub()函數用于正則表達式替換,基本用法是替換固定字符串,如將“apple”替換成“orange”。1.使用正則表達式可替換動態內容,如替換數字為“#number#”。2.常見場景包括清理空格、去除標點、匿名化手機號。3.替換時可用函數動態生成內容,如將數字乘以2。4.注意事項包括大小寫敏感、貪婪匹配、性能問題及分組替換技巧。掌握這些方面可靈活應對多數替換需求。
在python中,re.sub() 是一個非常實用的函數,用來通過正則表達式進行字符串替換。它的核心作用就是找到符合某種模式的文本,并替換成你指定的內容。
替換基本字符串
這是最簡單的用法:直接替換固定字符串。
比如你想把一段文字中的“apple”替換成“orange”,就可以這樣寫:
import re text = "I like apple." new_text = re.sub("apple", "orange", text) print(new_text) # 輸出:I like orange.
這個方法適用于你知道確切要替換什么內容的情況。但如果你面對的是更復雜的格式,比如不固定的數字、郵箱地址等,就需要用到正則表達式了。
使用正則表達式替換動態內容
re.sub() 的強大之處在于支持正則表達式,可以匹配動態變化的內容。
比如你想把所有的數字替換成“#NUMBER#”,可以這樣做:
text = "The price is 123 dollars." new_text = re.sub(r"d+", "#NUMBER#", text) print(new_text) # 輸出:The price is #NUMBER# dollars.
這里 d+ 表示一個或多個數字,r”” 表示原始字符串,避免轉義問題。常見場景包括:
立即學習“Python免費學習筆記(深入)”;
- 清理多余空格:re.sub(r”s+”, ” “, text)
- 去除標點符號:re.sub(r”[^ws]”, “”, text)
- 匿名化手機號:re.sub(r”1d{10}”, “****”, text)
這類操作在數據清洗和文本預處理時特別有用。
替換時使用函數動態生成內容
有時候你不只是想替換成固定內容,而是希望根據匹配結果動態生成新值。這時你可以傳入一個函數作為替換參數。
例如,將所有數字乘以2:
import re def double(match): num = int(match.group(0)) return str(num * 2) text = "The numbers are 10, 20 and 30." new_text = re.sub(r"d+", double, text) print(new_text) # 輸出:The numbers are 20, 40 and 60.
這個功能適合做數據轉換、敏感詞脫敏、自定義格式化等任務。關鍵點是你的函數必須接收一個 match 對象,并返回一個字符串。
注意事項和小技巧
使用 re.sub() 時有幾個細節容易忽略:
- 大小寫敏感:默認區分大小寫,如果不區分,加上 flags=re.IGNORECASE
- 貪婪匹配:正則默認是貪婪的,可能影響替換范圍,必要時用非貪婪模式(比如 .*?)
- 性能問題:如果只是簡單替換,不如用 str.replace() 更快
- 分組替換:可以用 1, 2 等引用捕獲組內容來構造新的替換結果
基本上就這些。掌握這幾個方面,就能靈活應對大多數字符串替換的需求了。