欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中使用正則表達式替換特定格式的文本

 更新時間:2025年09月08日 15:17:15   作者:xiaopengbc  
在Python中使用正則表達式替換特定格式的文本,主要通過re模塊的sub()和subn()函數(shù)實現(xiàn),本文給大家介紹Python中使用正則表達式替換特定格式的文本,感興趣的朋友一起看看吧

在Python中使用正則表達式替換特定格式的文本,主要通過re模塊的sub()subn()函數(shù)實現(xiàn)。這兩個函數(shù)可以根據(jù)正則表達式模式查找匹配內(nèi)容,并替換為指定的字符串或通過函數(shù)生成的內(nèi)容。

一、核心函數(shù)

  • re.sub(pattern, repl, string, count=0, flags=0)
    • 功能:替換字符串中所有匹配pattern的子串為repl
    • 返回值:替換后的新字符串
    • 參數(shù):
      • pattern:正則表達式模式
      • repl:替換的字符串或回調(diào)函數(shù)
      • string:原始字符串
      • count:最大替換次數(shù)(默認0表示全部限制)
      • flags:正則匹配標志(如re.IGNORECASE忽略大小寫)
  • re.subn(pattern, repl, string, count=0, flags=0)
    • 功能:與sub()類似,但返回(新字符串, 替換次數(shù))的元組

二、常用替換場景示例

1. 基礎(chǔ)替換:固定字符串替換

將匹配的文本替換為固定內(nèi)容。

import re
# 將所有數(shù)字替換為"*"
text = "密碼: 123456, 驗證碼: 789"
result = re.sub(r"\d+", "*", text)
print(result)  # 輸出: 密碼: *, 驗證碼: *
# 限制替換次數(shù)(只替換前1個)
result = re.sub(r"\d+", "*", text, count=1)
print(result)  # 輸出: 密碼: *, 驗證碼: 789

2. 分組替換:利用匹配的分組內(nèi)容

通過()捕獲分組,在替換字符串中用\1、\2等引用分組內(nèi)容(類似變量復(fù)用)。

import re
# 交換姓名格式:" lastName, firstName" → "firstName lastName"
text = "Bond, James; Doe, John"
pattern = r"(\w+), (\w+)"  # 分組1:姓氏,分組2:名字
result = re.sub(pattern, r"\2 \1", text)  # 用\2和\1交換順序
print(result)  # 輸出: James Bond; John Doe
# 格式化日期:"MM/DD/YYYY" → "YYYY-MM-DD"
text = "今天是10/05/2023,昨天是10/04/2023"
pattern = r"(\d{2})/(\d{2})/(\d{4})"  # 分組1:月,分組2:日,分組3:年
result = re.sub(pattern, r"\3-\1-\2", text)
print(result)  # 輸出: 今天是2023-10-05,昨天是2023-10-04

3. 函數(shù)替換:動態(tài)生成替換內(nèi)容

當(dāng)替換規(guī)則復(fù)雜時,repl可以是一個函數(shù),根據(jù)匹配結(jié)果動態(tài)生成替換內(nèi)容。

import re
# 將數(shù)字乘以2(如"3"→"6","10"→"20")
def double_num(match):
    num = int(match.group())  # 獲取匹配的數(shù)字
    return str(num * 2)
text = "單價: 5, 數(shù)量: 3, 總價: 15"
result = re.sub(r"\d+", double_num, text)
print(result)  # 輸出: 單價: 10, 數(shù)量: 6, 總價: 30
# 敏感信息脫敏:保留手機號前3位和后4位,中間用*代替
def mask_phone(match):
    phone = match.group()
    return phone[:3] + "****" + phone[-4:]
text = "聯(lián)系電話: 13812345678, 備用電話: 19987654321"
result = re.sub(r"1[3-9]\d{9}", mask_phone, text)
print(result)  # 輸出: 聯(lián)系電話: 138****5678, 備用電話: 199****4321

4. 忽略大小寫替換

通過flags=re.IGNORECASE(簡寫re.I)忽略大小寫匹配。

import re
# 將"apple"(不區(qū)分大小寫)替換為"banana"
text = "Apple, APPLE, apple"
result = re.sub(r"apple", "banana", text, flags=re.IGNORECASE)
print(result)  # 輸出: banana, banana, banana

5. 移除特定格式內(nèi)容

將匹配的內(nèi)容替換為空字符串,實現(xiàn)"刪除"效果。

import re
# 移除HTML標簽(如<a>、<div>等)
html = "<h1>標題</h1><p>內(nèi)容</p>"
result = re.sub(r"<.*?>", "", html)  # 匹配所有標簽并替換為空
print(result)  # 輸出: 標題內(nèi)容
# 移除字符串中的所有標點符號
text = "Hello, World! 這是一個示例:test."
result = re.sub(r"[^\w\s]", "", text)  # [^\w\s]匹配非單詞和非空白字符
print(result)  # 輸出: Hello World 這是一個示例 test

三、關(guān)鍵技巧

  1. 使用r前綴:替換字符串建議加r前綴(原始字符串),避免\被轉(zhuǎn)義(如r"\2"正確引用分組2)。
  2. 貪婪與非貪婪匹配:替換時注意模式的匹配范圍,必要時用?啟用非貪婪模式(如.*?匹配盡可能少的字符)。
  3. 預(yù)編譯模式:頻繁替換時,用re.compile()編譯模式提升效率:
    pattern = re.compile(r"\d+")
    result = pattern.sub("*", "A1B2C3")  # 輸出: "A*B*C*"

通過sub()subn(),可以靈活處理各種替換需求,從簡單的固定替換到復(fù)雜的動態(tài)生成替換內(nèi)容,正則表達式都能高效完成。

到此這篇關(guān)于Python中使用正則表達式替換特定格式的文本的文章就介紹到這了,更多相關(guān)python正則表達式替換文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python分割和拼接字符串

    python分割和拼接字符串

    python分割和拼接字符串的實例,使用了string的split和join 方法,并對這二個方法做說明。
    2013-11-11
  • 講解Python中for循環(huán)下的索引變量的作用域

    講解Python中for循環(huán)下的索引變量的作用域

    這篇文章主要介紹了講解Python中for循環(huán)下的索引變量的作用域,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,本文給出了Python3的示例幫助讀者理解,需要的朋友可以參考下
    2015-04-04
  • 基于python 爬蟲爬到含空格的url的處理方法

    基于python 爬蟲爬到含空格的url的處理方法

    今天小編就為大家分享一篇基于python 爬蟲爬到含空格的url的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python排序算法之選擇排序

    python排序算法之選擇排序

    這篇文章主要介紹了python排序算法之選擇排序,選擇排序表示從無序的數(shù)組中,每次選擇最小或最大的數(shù)據(jù),從無序數(shù)組中放到有序數(shù)組的末尾,以達到排序的效果,需要的朋友可以參考下
    2023-04-04
  • Pandas高級教程之Pandas中的GroupBy操作

    Pandas高級教程之Pandas中的GroupBy操作

    通常來說groupby操作可以分為三部分:分割數(shù)據(jù),應(yīng)用變換和和合并數(shù)據(jù),本文將會詳細講解Pandas中的groupby操作,感興趣的朋友一起看看吧
    2021-07-07
  • 使用pyinstaller打包PySide2程序中遇到的問題

    使用pyinstaller打包PySide2程序中遇到的問題

    說到打包,我們就需要用到python程序的打包工具pyinstaller了,這個包安裝簡單,使用同樣簡單,下面這篇文章主要給大家介紹了關(guān)于使用pyinstaller打包PySide2程序中遇到的問題,需要的朋友可以參考下
    2023-05-05
  • Python筆記(叁)繼續(xù)學(xué)習(xí)

    Python筆記(叁)繼續(xù)學(xué)習(xí)

    最近時間擠來擠去,看英文的文檔,順便熟悉英語,需要反復(fù)好幾遍,才能做點筆記。讀的是《Beginning.Python.From.Novice.to.Professional》,大家可以下載看一下
    2012-10-10
  • 使用CodeMirror實現(xiàn)Python3在線編輯器的示例代碼

    使用CodeMirror實現(xiàn)Python3在線編輯器的示例代碼

    這篇文章主要介紹了使用CodeMirror實現(xiàn)Python3在線編輯器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 帶你了解Python妙開根號的三種方式

    帶你了解Python妙開根號的三種方式

    這篇文章主要為大家介紹了Python妙開根號的三種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python3爬蟲GIL修改多線程實例講解

    python3爬蟲GIL修改多線程實例講解

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python3爬蟲GIL修改多線程實例講解內(nèi)容,需要的朋友們可以參考下。
    2020-11-11

最新評論