Python正則替換終極指南:用re.sub玩轉字符串魔法

Python正則替換終極指南:用re.sub玩轉字符串魔法

一、為什么re.sub是文本處理的瑞士軍刀?

在Python的re模塊中,re.sub()的周下載量突破5800萬次(2025年PyPI數據),它實現了:

  • 📍 模式匹配替換
  • 📍 動態內容生成
  • 📍 批量文本清洗
  • 📍 結構化數據轉換

二、基礎篇:5分鐘掌握核心用法

1. 函數原型剖析

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern:正則表達式模式(字符串或編譯后的模式對象)
  • repl:替換內容(字符串或回調函數)
  • string:原始輸入字符串
  • count:最大替換次數(0表示全部替換)
  • flags:匹配模式(如忽略大小寫re.IGNORECASE

2. 基礎替換示例

import re # 替換所有數字為*
text = "訂單號:AB2025 金額:1500元"
result = re.sub(r"\d", "*", text)
print(result)  # 訂單號:AB**** 金額:****元 # 限制替換次數 
text = "1-2-3-4-5"
result = re.sub(r"-", ":", text, count=2)
print(result)  # 1:2:3-4-5 

以下案例均要添加 import re

三、進階篇:解鎖三大高階技巧

1. 分組捕獲與反向引用

\1 代表匹配的第1項,\2代表匹配的第2項,以此類推

# 重組日期格式(YYYY/MM/DD → DD-MM-YYYY)
text = "2025/02/20 → 2026/03/21"
result = re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\3-\2-\1", text)
print(result)  # 20-02-2025 → 21-03-2026 # 給手機號加掩碼 
text = "聯系電話:13812345678"
result = re.sub(r"(\d{3})\d{4}(\d{4})", r"\1****\2", text)
print(result)  # 聯系電話:138****5678 

2. 動態回調函數

# 數學表達式升級(數字擴大1000倍)
def multiply(match):num = float(match.group(1))return str(num * 1000)text = "重量0.5kg 長度1.2m"
result = re.sub(r"(\d+\.?\d*)", multiply, text)
print(result)  # 重量500.0kg 長度1200.0m 

3. 命名分組與復雜替換

# 處理國際化日期格式
text = "Date: 02/20/2025 (MM/DD/YYYY)"
result = re.sub(r"(\d{2})/(\d{2})/(\d{4})",r"\3年\2月\1日",text
)
print(result)  # Date: 2025年02月20日 (MM/DD/YYYY)

四、工業級最佳實踐

1. 性能優化方案

\b:匹配一個單詞邊界。

# 預編譯正則模式(處理百萬級文本時提速3倍)
pattern = re.compile(r"\b\d{6}\b")  # 匹配6位純數字
text = "郵政編碼:100001 200002"
result = pattern.sub("[郵編]", text)
print(result)  # 郵政編碼:[郵編] [郵編]

2. 處理多語言文本

中日韓字符過濾(2025年新增unicode擴展區支持)
# 預編譯正則表達式(工業級推薦)
cjk_pattern = re.compile(r"([\u4e00-\u9fff\u3400-\u4dbf]|"  # 中文r"[\u3040-\u309F\u30A0-\u30FF]|"  # 日文r"[\uAC00-\uD7A3\u1100-\u11FF])+",  # 韓文flags=re.UNICODE
)text = "2025新版:漢字 かな ????"
result = cjk_pattern.sub("[CJK]", text)
print(result)  # 輸出:2025[CJK]:[CJK] [CJK] [CJK]

如果不過濾中文:

cjk_pattern = re.compile(r"([\u3040-\u309F\u30A0-\u30FF]|"  # 日文r"[\uAC00-\uD7A3\u1100-\u11FF])+",  # 韓文flags=re.UNICODE
)text = "2025新版:漢字 かな ????"
result = cjk_pattern.sub("[CJK]", text)
print(result)  # 2025新版:漢字 [CJK] [CJK]

3. 安全替換策略

# 防御正則注入攻擊
def safe_sub(pattern, repl, text):escaped_pattern = re.escape(pattern)return re.sub(escaped_pattern, repl, text)user_input = "惡意輸入[a-z].*"
text = "重要數據:abc123"
result = safe_sub(user_input, "", text)  # 原樣輸出
print(result)  # 重要數據:abc123

五、三大實戰應用場景

1. 數據清洗管道

def clean_log(text):rules = [(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "[IP]"),  # 隱藏IP (r"\d{2}:\d{2}:\d{2}", "[TIME]"),               # 隱藏時間 (r"password=\w+", "password=")              # 脫敏密碼 ]for pattern, repl in rules:text = re.sub(pattern, repl, text)return text 

2. 模板引擎開發

template = "歡迎{name}!您的訂單{order_id}已發貨"
context = {"name": "張三", "order_id": "20250220"}def render(tpl, data):return re.sub(r"{(\w+)}",lambda m: str(data.get(m.group(1), "")), tpl )print(render(template, context))  # 歡迎張三!您的訂單20250220已發貨 

3. Markdown轉換器

def markdown_to_html(text):text = re.sub(r"### (.+)", r"\1", text)  # 三級標題 text = re.sub(r"!\[(.*?)\]\((.*?)\)", r'', text)return text 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70272.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gen_gauss_filter用于檢測帶方向的線條

目錄 一、核心參數分析 1.1 方向覆蓋范圍 1.2 濾波器方向帶寬 二、角度配置建議 三、參數選擇依據 四、實施建議 五、模擬圖測試(項目圖檔不好直接分享) 5.1 模擬圖制作 5.2 檢測偽代碼 在Halcon中使用高斯濾波器檢測多方向線條時,角度參數的選取需要綜合考慮濾波…

C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串轉換工具

文章目錄 1. 傳統轉換方法的局限性2. std::to_chars:數值到字符串的高效轉換函數原型:返回值:示例代碼:輸出: 3. std::from_chars:字符串到數值的高效解析函數原型:返回值:示例代碼&…

深入學習解析:183頁可編輯PPT華為市場營銷MPR+LTC流程規劃方案

華為終端正面臨銷售模式轉型的關鍵時刻,旨在通過構建MPRLTC項目,以規避對運營商定制的過度依賴,并探索新的增長路徑。項目核心在于建設一套全新的銷售流程與IT系統,支撐雙品牌及自有品牌的戰略發展。 項目總體方案聚焦于四大關鍵議…

Python正則表達式處理中日韓字符過濾全解析

Python正則表達式處理中日韓字符過濾全解析 一、核心原理:Unicode字符范圍定位 中日韓字符在Unicode中的分布: 中文:\u4e00-\u9fff(基本區) \u3400-\u4dbf(擴展A區) \U00020000-\U0002a6df…

基于WOA鯨魚優化的WSN網絡最優節點部署算法matlab仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鯨魚優化算法(WOA)是一種模擬座頭鯨捕食行為的元啟發式優化算法。其主要原理基于座頭鯨獨特的 “氣泡網” 捕食策略,通過數學模…

【數據分析】3 數據分析成長之路

職業發展路徑: 向上發展(技術方向):可以詳細說明成為數據科學家或專家所需的具體技能和步驟,包括學習的算法、工具等。向下發展(業務方向):可以探討結合業務知識的具體領域&#xff…

excel導入Mysql中時間格式異常

問題描述: 當使用xls/xlsx/csv導入mysql中,如果列是時間類型比如excel表中顯示2024/02/20 09:18:00,導入后時間可能就會變成1900-01-01 09:18:00這樣。 問題原因: 這是由于excel表中和數據庫中的時間類型不匹配導致。 問題解決…

async checkpointing

Reducing Model Checkpointing Times by Over 10x with PyTorch Distributed Asynchronous Checkpointing | PyTorch 最初來源:IBM Research 核心思想:GPU->CPU,用的是blocking;CPU->Disk,用的是異步不阻塞訓練…

Nginx穩定版最新1.26.2源碼包安裝【保姆級教學】

Nginx安裝及配置 開源Nginx官網地址(https://nginx.org) Nginx源碼包下載地址(https://nginx.org/en/download.html) Mainline version 主線版本 Stable version 穩定版本 Legacy versions 陳舊版本 下載Nginx源碼文件 curl -O https://nginx.org/download/nginx-1.26.2.t…

在ubuntu上用Python的openpyxl模塊操作Excel的案例

文章目錄 安裝模塊讀取Excel數據庫取數匹配數據和更新Excel數據 在Ubuntu系統的環境下基本職能借助Python的openpyxl模塊實現對Excel數據的操作。 安裝模塊 本次需要用到的模塊需要提前安裝(如果沒有的話) pip3 install openpyxl pip3 install pymysql在操作前,需…

GeoHD - 一種用于智慧城市熱點探測的Python工具箱

GeoHD - 一種用于智慧城市熱點探測的Python工具箱 詳細原理請參考:Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137. 代碼下載:下載 1. 簡介 在城市數據…

16 中介者(Mediator)模式

中介者模式 1.1 分類 (對象)行為型 1.2 提出問題 實現一個機場的起飛管理系統,如果由駕駛員們討論誰先飛,后果可能是災難性的。 1.3 解決方案 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用&a…

最薄的機身,游最深的海

經濟全球化的潮流,勢不可擋。 “技術、通訊和全球化,正在消除傳統的地理和經濟邊界,使競爭環境趨于平等。”《世界是平的》作者托馬斯弗里德曼預言的"扁平化競爭"正加速演進。 在高端智能手機戰場,一場由中國企業主導…

【HarmonyOS Next】鴻蒙監聽手機按鍵

【HarmonyOS Next】鴻蒙監聽手機按鍵 一、前言 應用開發中我們會遇到監聽用戶實體按鍵,或者擴展按鍵的需求。亦或者是在某些場景下,禁止用戶按下某些按鍵的業務需求。 這兩種需求,鴻蒙都提供了對應的監聽事件進行處理。 onKeyEvent 默認的…

IC設計版圖中GDS2文件格式詳解

版圖中GDS2文件格式詳解 目錄 什么是GDS2文件?GDS2文件的歷史與發展GDS2文件的結構解析GDS2文件的核心元素GDS2 vs. OASIS: 核心差異如何生成與查看GDS2文件?GDS2文件的局限性應用場景總結 什么是GDS2文件? GDS2(Graphic Data …

KMP算法:字符串匹配的智慧跳躍

文章目錄 起因:暴力法的致命缺陷暴力搜索的局限性 KMP核心思想:避免重復理解前綴表(PMT)不匹配時的回退機制代碼:高效字符串匹配補充:next表和PMT表 暴力法 vs KMP總結:KMP 是如何改變游戲規則的…

上位機知識篇---setuptools

文章目錄 前言簡介一、核心功能1.依賴管理自動安裝依賴版本約束額外依賴組命令行工具插件系統 2.開發模式安裝3.資源文件管理4.Egg 分發(已逐漸被 Wheel 取代)5.命名空間包 二、基礎用法1. 項目結構示例2. 配置文件 setup.cfg3. setup.py 最小化示例&…

藍橋杯學習大綱

(致酷德與熱愛算法、編程的小伙伴們) 在查閱了相當多的資料后,發現沒有那篇博客、文章很符合我們備戰藍橋杯的學習路徑。所以,干脆自己整理一篇,歡迎大家補充! 一、藍橋必備高頻考點 我們以此為重點學習…

Go 錯誤處理與調試:面向對象的入門教程

Go 錯誤處理與調試:面向對象的入門教程 Go 語言因其簡潔、高效和易于并發編程的特性,逐漸成為后端開發的主流語言之一。錯誤處理是任何編程語言中非常重要的一部分,尤其是在 Go 語言中,Go 提供了一種不同于傳統異常處理機制的錯誤…

Linux探秘坊-------4.進度條小程序

1.緩沖區 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }執行此代碼后&#xff0c;會 先停頓兩秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;為什么會后打印呢&#xff1f; 因為&#xff…