最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?re模塊的使用全過程

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

一、模塊簡介

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

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

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

二、核心功能

  • 函數(shù)介紹:
函數(shù)名稱匹配范圍返回類型適用場景性能特點(diǎn)
re.match僅字符串開頭Match/None格式校驗(yàn)快速失敗
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)

特點(diǎn)

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

參數(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)匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號,在這種情況下它將返回一個(gè)包含那些組所對應(yīng)值的元組。
groups()返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  • 使用案例
# 驗(yàn)證字符串是否以數(shù)字開頭,調(diào)用這個(gè)方法等同于 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)

特點(diǎn)

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

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

使用案例

# 查找第一個(gè)有效數(shù)字串,只匹配第一個(gè)
text = "Total: 1500 items, price $299"
match = re.search(r'\d+', text)
if match:
    print(f"價(jià)格:{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)

特點(diǎn)

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

參數(shù)說明

  • pattern : 一個(gè)字符串形式的正則表達(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)志可以單獨(dú)使用,也可以通過按位或(|)組合使用。例如,re.IGNORECASE | re.MULTILINE 表示同時(shí)啟用忽略大小寫和多行模式。

返回re.Pattern對象

使用案例

# 預(yù)編譯郵箱驗(yàn)證正則
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匹配成功時(shí)返回一個(gè) Match 對象,其中:

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

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

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

^注意: 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)

特點(diǎn)

  • 和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回
  • 處理大文本時(shí)內(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}報(bào)警:{req_id}")

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

特點(diǎn)

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

參數(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})  # 時(shí)間
    \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)志可以單獨(dú)使用,也可以通過按位或(|)組合使用。

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

最佳實(shí)踐建議

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

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

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

總結(jié)

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

相關(guān)文章

  • Python繪制地理圖表可視化神器pyecharts

    Python繪制地理圖表可視化神器pyecharts

    這篇文章主要介紹了Python繪制地理圖表可視化神器pyecharts,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Python Socket 編程知識點(diǎn)詳細(xì)介紹

    Python Socket 編程知識點(diǎn)詳細(xì)介紹

    這篇文章主要介紹了Python Socket 編程,Socket又稱為套接字,它是所有網(wǎng)絡(luò)通信的基礎(chǔ)。網(wǎng)絡(luò)通信其實(shí)就是進(jìn)程間的通信,Socket主要是使用IP地址,協(xié)議,端口號來標(biāo)識一個(gè)進(jìn)程,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • Python基于DeepSeek大模型的提示詞優(yōu)化方案

    Python基于DeepSeek大模型的提示詞優(yōu)化方案

    以下基于DeepSeek大模型特性及搜索結(jié)果的綜合分析,結(jié)合提示詞設(shè)計(jì)原則、技術(shù)原理與優(yōu)化策略,提供完整Python代碼案例及詳細(xì)解析,需要的朋友可以參考下
    2025-04-04
  • Pycharm如何返回上一次編輯處的快捷鍵

    Pycharm如何返回上一次編輯處的快捷鍵

    這篇文章主要介紹了Pycharm如何返回上一次編輯處的快捷鍵問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Django實(shí)現(xiàn)圖片文字同時(shí)提交的方法

    Django實(shí)現(xiàn)圖片文字同時(shí)提交的方法

    這篇文章主要介紹了Django實(shí)現(xiàn)圖片文字同時(shí)提交的方法,較為詳細(xì)的分析了Django+jQuery實(shí)現(xiàn)圖片與文字同時(shí)提交的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 利用Python開發(fā)實(shí)現(xiàn)簡單的記事本

    利用Python開發(fā)實(shí)現(xiàn)簡單的記事本

    最近想對python加深學(xué)習(xí)一下,同時(shí)也是想試著做一些東西,所以使用python,結(jié)合Tkinter來做一個(gè)簡單的跨平臺記事本。最終實(shí)現(xiàn)的記事本如下,也算是麻雀雖小,五臟俱全了,之后也是會繼續(xù)完善的。文中通過圖文及示例代碼介紹的很詳細(xì),有需要的朋友們可以參考借鑒。
    2016-11-11
  • Python使用pyautogui模塊實(shí)現(xiàn)自動化鼠標(biāo)和鍵盤操作示例

    Python使用pyautogui模塊實(shí)現(xiàn)自動化鼠標(biāo)和鍵盤操作示例

    這篇文章主要介紹了Python使用pyautogui模塊實(shí)現(xiàn)自動化鼠標(biāo)和鍵盤操作,簡單描述了pyautogui模塊的功能,并結(jié)合實(shí)例形式較為詳細(xì)的分析了Python使用pyautogui模塊實(shí)現(xiàn)鼠標(biāo)與鍵盤自動化操作相關(guān)技巧,需要的朋友可以參考下
    2018-09-09
  • Python合并同一個(gè)文件夾下所有PDF文件的方法

    Python合并同一個(gè)文件夾下所有PDF文件的方法

    今天小編就為大家分享一篇關(guān)于Python合并同一個(gè)文件夾下所有PDF文件的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Python中re.findall()用法詳解

    Python中re.findall()用法詳解

    本文主要介紹了Python中re.findall()用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 如何用Python編寫一個(gè)電子考勤系統(tǒng)

    如何用Python編寫一個(gè)電子考勤系統(tǒng)

    這篇文章主要介紹了用Python編寫一個(gè)電子考勤系統(tǒng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評論

唐河县| 阿勒泰市| 彭州市| 福鼎市| 东乡县| 昭觉县| 天祝| 类乌齐县| 邯郸县| 油尖旺区| 孝义市| 外汇| 永宁县| 忻城县| 旌德县| 万年县| 奉新县| 明溪县| 福州市| 专栏| 琼海市| 朔州市| 当雄县| 淳安县| 抚宁县| 临武县| 安新县| 炎陵县| 新和县| 富锦市| 孟村| 苍梧县| 靖安县| 岗巴县| 阳新县| 左贡县| 襄汾县| 永泰县| 长岛县| 雷波县| 江达县|