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

Python?re模塊的使用全過程

 更新時間:2025年04月14日 14:58:02   作者:Yant224  
這篇文章主要介紹了Python?re模塊的使用全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、模塊簡介

re 模塊是 Python 標(biāo)準(zhǔn)庫中處理正則表達(dá)式的核心工具,提供強大的文本模式匹配、搜索和替換功能。通過特定的語法規(guī)則,可以快速完成以下任務(wù):

  • 數(shù)據(jù)驗證(郵箱/手機號格式校驗)
  • 文本內(nèi)容提?。ㄈ罩痉治?網(wǎng)頁爬蟲)
  • 批量文本處理(格式轉(zhuǎn)換/敏感詞過濾)
  • 復(fù)雜字符串操作(多條件分割/模板替換)

正則表達(dá)式引擎基于 PCRE(Perl Compatible Regular Expressions)實現(xiàn)

二、核心功能

  • 函數(shù)介紹:
函數(shù)名稱匹配范圍返回類型適用場景性能特點
re.match僅字符串開頭Match/None格式校驗快速失敗
re.search全局首次匹配Match/None內(nèi)容提取中等性能
re.findall所有非重疊匹配list批量數(shù)據(jù)收集內(nèi)存消耗高
re.finditer所有非重疊匹配iterator大文本處理內(nèi)存友好
re.split分割字符串list復(fù)雜分隔符處理替代str.split
re.compile-Pattern對象高頻正則表達(dá)式復(fù)用提升30%性能

三. 功能詳解

1. re.match(pattern, string, flags=0)

特點

  • 僅匹配字符串開頭,如果不是起始位置匹配成功的話,match() 就返回 None。
  • 相當(dāng)于自動添加^錨點

參數(shù)說明

參數(shù)描述
pattern匹配的正則表達(dá)式
string要匹配的字符串。
flags標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志

返回值

  • 成功:re.Match對象,使用 group(num)groups() 匹配對象函數(shù)來獲取匹配表達(dá)式
  • 失?。?code>None
匹配對象方法描述
group(num=0)匹配的整個表達(dá)式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應(yīng)值的元組。
groups()返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。
  • 使用案例
# 驗證字符串是否以數(shù)字開頭,調(diào)用這個方法等同于 r'^\d+'
# 如果匹配的字符串是c123abc,是匹配不到的
if re.match(r'\d+', '123abc'):
    print("Valid header")
else:
    print("Invalid header")

# 提取開頭的版本號
version = re.match(r'v?(\d+\.\d+)', 'v3.8.1').group(1)  # '3.8'

2. re.search(pattern, string, flags=0)

特點

  • 掃描整個字符串尋找第一個匹配
  • 支持復(fù)雜定位邏輯

參數(shù)與返回:同re.match

使用案例

# 查找第一個有效數(shù)字串,只匹配第一個
text = "Total: 1500 items, price $299"
match = re.search(r'\d+', text)
if match:
    print(f"價格:{match.group()}")  # 1500

# 帶條件的搜索
pattern = r'(?<=ID:)\s*[A-Z0-9]{8}'  # 查找ID后的8位編碼
id_code = re.search(pattern, "User ID: AB3XK9P2").group()  # AB3XK9P2

3. re.compile(pattern, flags=0)

特點

  • 預(yù)編譯正則表達(dá)式,生成一個正則表達(dá)式( Pattern )對象
  • 適合高頻調(diào)用場景

參數(shù)說明

  • pattern : 一個字符串形式的正則表達(dá)式
  • flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
    • re.IGNORECASEre.I - 使匹配對大小寫不敏感
    • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
    • re.MULTILINEre.M - 多行模式,改變 ^$ 的行為,使它們匹配字符串的每一行的開頭和結(jié)尾。
    • re.DOTALLre.S - 使 . 匹配包括換行符在內(nèi)的任意字符。
    • re.ASCII - 使 \w, \W, \b, \B, \d, \D, \s, \S 僅匹配 ASCII 字符。
    • re.VERBOSEre.X - 忽略空格和注釋,可以更清晰地組織復(fù)雜的正則表達(dá)式。

這些標(biāo)志可以單獨使用,也可以通過按位或(|)組合使用。例如,re.IGNORECASE | re.MULTILINE 表示同時啟用忽略大小寫和多行模式。

返回re.Pattern對象

使用案例

# 預(yù)編譯郵箱驗證正則
email_re = re.compile(
    r'''(
        [\w\.-]+          # 用戶名
        @ 
        [\w\.-]+          # 域名
        \.
        [a-zA-Z]{2,4}     # 頂級域名
    )''', re.VERBOSE)

# 復(fù)用編譯對象
valid = email_re.match('user@example.com') is not None  # True

案例調(diào)用match匹配成功時返回一個 Match 對象,其中:

  • group([group1, …]) 方法用于獲得一個或多個分組匹配的字符串,當(dāng)要獲得整個匹配的子串時,可直接使用 group()group(0);
  • start([group]) 方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數(shù)默認(rèn)值為 0;
  • end([group]) 方法用于獲取分組匹配的子串在整個字符串中的結(jié)束位置(子串最后一個字符的索引+1),參數(shù)默認(rèn)值為 0
  • span([group]) 方法返回 (start(group), end(group))。

4. re.findall(pattern, string, flags=0)

特點:在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個列表,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。

^注意: match 和 search 是匹配一次 findall 匹配所有。

參數(shù)說明

  • pattern 匹配模式。
  • string 待匹配的字符串。
  • pos 可選參數(shù),指定字符串的起始位置,默認(rèn)為 0。
  • endpos 可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長度。

返回值

  • 無分組:匹配字符串列表 [‘a’, ‘b’, …]
  • 有分組:分組元組列表 [(‘a’, ‘1’), …]

使用案例

# 提取所有數(shù)字
numbers = re.findall(r'\d+', 'A1B23C456')
print(numbers)  # ['1','23','456']

# 分組提取日期成分
dates = re.findall(r'(\d{4})-(\d{2})-(\d{2})', '2023-08-01, 2025-03-15')
print(dates)  # [('2023','08','01'), ('2025', '03', '15')]

5. re.finditer(pattern, string, flags=0)

特點

  • 和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個迭代器返回
  • 處理大文本時內(nèi)存更高效
參數(shù)描述
pattern匹配的正則表達(dá)式
string要匹配的字符串。
flags標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志
  • 返回值callable_iterator對象
  • 使用案例
# 處理100MB日志文件
with open('server.log') as f:
    for match in re.finditer(r'$$(ERROR|WARN)$$.*?(req_id=\w+)', f.read()):
        level = match.group(1)
        req_id = match.group(2)
        print(f"{level}報警:{req_id}")

6. re.split(pattern, string, maxsplit=0, flags=0)

特點

  • split 方法按照能夠匹配的子串將字符串分割后返回列表
  • 保留分割符內(nèi)容(使用分組時)

參數(shù)說明

參數(shù)描述
pattern匹配的正則表達(dá)式
string要匹配的字符串。
maxsplit分割次數(shù),maxsplit=1 分割一次,默認(rèn)為 0,不限制次數(shù)。
flags標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志
  • 使用案例
# 復(fù)雜分隔符分割
text = "apple, banana;cherry|orange"
parts = re.split(r'[,;|]\s*', text)  # ['apple','banana','cherry','orange']

# 帶保留分隔符的分割
re.split(r'([,;])', 'a,b;c')  # ['a', ',', 'b', ';', 'c']

# 控制分割次數(shù)
re.split(r'\d+', 'a1b22c333d', maxsplit=2)  # ['a','b','c333d']

四、綜合應(yīng)用案例

日志分析系統(tǒng)

log_pattern = re.compile(r'''
    (?P<time>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})  # 時間
    \s\|\s
    (?P<level>INFO|ERROR|WARN)                      # 日志級別
    \s\|\s
    (?P<module>\w+)\.py                             # 模塊
    :(?P<line>\d+)                                  # 行號
    \s-\s
    (?P<msg>.+)                                     # 消息
''', re.VERBOSE)

for log in open('app.log'):
    if (match := log_pattern.search(log)):
        print(f"{match.group('time')} [{match.group('level')}]", 
              f"{match.group('module')}:{match.group('line')}",
              match.group('msg'))

五、正則表達(dá)式修飾符 - 可選標(biāo)志

正則表達(dá)式可以包含一些可選標(biāo)志修飾符來控制匹配的模式。

以下標(biāo)志可以單獨使用,也可以通過按位或(|)組合使用。

例如:re.IGNORECASE | re.MULTILINE 表示同時啟用忽略大小寫和多行模式。

最佳實踐建議

  1. ?優(yōu)先使用編譯對象:當(dāng)正則使用超過3次時
  2. ?合理使用分組:避免過多捕獲組影響性能
  3. ?注意貪婪匹配:非貪婪模式.*?可避免意外匹配
  4. ?處理特殊字符:用re.escape()處理動態(tài)輸入
  5. 控制回溯次數(shù):復(fù)雜正則可能引發(fā)性能問題

完整API文檔:Python re模塊官方文檔

模塊功能說明
用戶管理1. 注冊登錄2. 權(quán)限控制3. 資料修改
訂單系統(tǒng)
  • 創(chuàng)建訂單
  • 支付處理
  • 物流跟蹤

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    本文主要介紹了非極大值抑制(Non-Maximum Suppression,NMS)的四種實現(xiàn)方式,不同方法對NMS速度的影響各不相同,感興趣的小伙伴可以了解一下
    2021-11-11
  • 如何通過python檢查文件是否被占用

    如何通過python檢查文件是否被占用

    這篇文章主要介紹了如何通過python檢查文件是否被占用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Sanic框架流式傳輸操作示例

    Sanic框架流式傳輸操作示例

    這篇文章主要介紹了Sanic框架流式傳輸操作,結(jié)合實例形式分析了Sanic通過流請求與響應(yīng)傳輸操作相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • 對pandas讀取中文unicode的csv和添加行標(biāo)題的方法詳解

    對pandas讀取中文unicode的csv和添加行標(biāo)題的方法詳解

    今天小編就為大家分享一篇對pandas讀取中文unicode的csv和添加行標(biāo)題的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python用tkinter實現(xiàn)一個gui的翻譯工具

    python用tkinter實現(xiàn)一個gui的翻譯工具

    這篇文章主要介紹了python用tkinter實現(xiàn)一個gui的翻譯工具,幫助大家更好的理解和使用python,感興趣的朋友可以了解下 +
    2020-10-10
  • Python中閉包與lambda的作用域解析

    Python中閉包與lambda的作用域解析

    這篇文章主要介紹了Python中閉包與lambda的作用域解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖的基本參數(shù)詳解

    Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖的基本參數(shù)詳解

    matplotlib.pyplot模塊是一個功能強大的畫圖模塊,可以對畫圖的多個參數(shù)進行調(diào)整,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖基本參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 如何查看Django ORM執(zhí)行的SQL語句的實現(xiàn)

    如何查看Django ORM執(zhí)行的SQL語句的實現(xiàn)

    這篇文章主要介紹了如何查看Django ORM執(zhí)行的SQL語句的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python調(diào)用動態(tài)鏈接庫的基本過程詳解

    python調(diào)用動態(tài)鏈接庫的基本過程詳解

    這篇文章主要介紹了python調(diào)用動態(tài)鏈接庫的基本過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    在之前的編程中,我們的信息打印,數(shù)據(jù)的展示都是在控制臺(命令行)直接輸出的,信息都是一次性的沒有辦法復(fù)用和保存以便下次查看,今天我們將學(xué)習(xí)Python的輸入輸出,解決以上問題
    2019-04-04

最新評論