正則表達式與python使用

一、Python正則表達式基礎

1. 導入模塊

Python通過 re 模塊實現正則表達式功能,需先導入模塊:

import re

2. 核心語法

  • 普通字符:直接匹配字面值(如 a 匹配字符 a)。
  • 元字符:
    • \d:匹配數字(等價于 [0-9])。
    • \w:匹配字母、數字、下劃線(等價于 [a-zA-Z0-9_])。
    • \s:匹配空白字符(空格、制表符等)。
    • ^$:分別匹配字符串開頭和結尾。
    • \b:單詞邊界(如 \bpython\b 匹配獨立單詞 python)。

3. 量詞

  • *:匹配0次或多次(如 a* 匹配空字符串或多個 a)。
  • +:匹配1次或多次(如 a+ 至少匹配一個 a)。
  • ?:匹配0次或1次(如 a? 可選 a)。
  • {m,n}:匹配m到n次(如 \d{3,5} 匹配3-5位數字)。

二、常用函數與使用示例

1. 匹配函數

  • re.match():從字符串開頭匹配,返回 Match 對象(若匹配失敗則返回 None)。
    text = "Hello, World!"
    match = re.match(r"Hello", text)
    if match:print(match.group())  # 輸出 "Hello"
    
  • re.search():在整個字符串中搜索第一個匹配項。
    match = re.search(r"World", text)
    print(match.group())  # 輸出 "World"
    
  • re.findall():返回所有匹配的子串列表。
    matches = re.findall(r"\w+", text)  # 輸出 ['Hello', 'World']
    

2. 替換與分割

  • re.sub():替換匹配內容。
    new_text = re.sub(r"World", "Python", text)  # 輸出 "Hello, Python!"
    
  • re.split():根據模式分割字符串。
    parts = re.split(r",", text)  # 輸出 ['Hello', ' World!']
    

3. 編譯正則表達式

預編譯可提升多次調用效率:

pattern = re.compile(r"\b\w{3}\b")  # 匹配3位單詞
matches = pattern.findall("The quick brown fox")

三、分組與捕獲

使用 () 分組提取特定內容:

text = "apple, banana, cherry"
match = re.match(r"(\w+), (\w+), (\w+)", text)
print(match.groups())  # 輸出 ('apple', 'banana', 'cherry')

非貪婪匹配

添加 ? 實現最小匹配:

text = "2023-04-02T10:11:12Z"
date = re.search(r"\d{4}-\d{2}-\d{2}", text).group()  # 輸出 "2023-04-02"

四、實際應用場景

1. 數據驗證

  • 手機號驗證:^1[3-9]\d{9}$(以1開頭,第二位3-9,后接9位數字)。
  • 郵箱提取:([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})

2. 文本處理

  • 日期格式化:將 20230209 轉為 2023.02.09
    text = "管理辦法20230209(修訂).docx"
    new_text = re.sub(r"(\d{4})(\d{2})(\d{2})", r"\1.\2.\3", text)
    # 輸出 "管理辦法2023.02.09(修訂).docx"
    

3. 網頁數據抓取

  • 提取鏈接:
    import re, requests
    from bs4 import BeautifulSoup
    url = "https://example.com"
    html = requests.get(url).text
    links = re.findall(r'href\s*=\s*["\']([^"\']+)["\']', html)
    

五、優化技巧

  1. 預編譯正則表達式:使用 re.compile() 減少重復編譯開銷。
  2. 避免過度使用 .*:優先用精確匹配(如 \d{4} 代替 .*)。
  3. 忽略大小寫:添加 re.IGNORECASE 修飾符(如 re.findall(r"python", text, re.I))。

六、總結

Python的 re 模塊提供了強大的正則表達式功能,涵蓋匹配、替換、分組等操作。結合預編譯和優化技巧,可高效處理文本數據。實際開發中建議使用在線工具(如 Regexr)調試復雜表達式。

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

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

相關文章

從FP32到BF16,再到混合精度的全景解析

筆者做過目標檢測模型、超分模型以及擴散生成模型。其中最常使用的是單精度FP32、半精度FP16、BF16。 雙精度"FP64"就不說了,不太會用到。 #1. 單精度、半精度和混合精度 單精度(FP32)、半精度(FP16)和混合…

Hot100方法及易錯點總結2

本文旨在記錄做hot100時遇到的問題及易錯點 五、234.回文鏈表141.環形鏈表 六、142. 環形鏈表II21.合并兩個有序鏈表2.兩數相加19.刪除鏈表的倒數第n個節點 七、24.兩兩交換鏈表中的節點25.K個一組翻轉鏈表(坑點很多,必須多做幾遍)138.隨機鏈表的復制148.排序鏈表 N…

不在同一個局域網的遠程桌面連接怎么設置?本地內網計算機讓其他網絡遠程訪問6種常用方法

遠程桌面是一種重要的技術,它允許用戶通過網絡遠程訪問和控制另一臺計算機的桌面界面。但是,當被控制端和控制端不在同一個局域網內時,就需要進行一些額外的配置。本文將詳細介紹在不同局域網下設置遠程桌面的步驟,以幫助讀者順利…

天機學堂day10作業,完善兌換優惠券功能

UserCouponServiceImpl /*** 兌換碼兌換優惠券* param code*/TransactionalOverridepublic void exchangeCoupon(String code) {//1、校驗code是否為空if (StringUtils.isBlank(code)) {throw new BadRequestException("非法參數!");}//2、解析兌換碼&…

JAVA工程師面試題(七)

1、遞歸實現1,1,2,3,5,8,….第30個數是多少&#xff1f; public static int Foo(int i) { if (i < 0) return 0; else if(i > 0 && i < 2) return 1; else return Foo(i -1) Foo(i - 2); }…

Qt基礎009(HTTP編程和QJSON)

文章目錄 軟件開發網絡架構BS架構/CS架構 HTTP基本概念QT的HTTP編程JSON數據概述QT生成JSON數據QT解析JSON數據 軟件開發網絡架構 BS架構/CS架構 ? 在計算機網絡和軟件開發中&#xff0c;CS架構&#xff08;Client-Server Architecture&#xff0c;客戶端-服務器架構&#x…

高精度電流檢測革命:同軸分流器的創新應用與技術演進

一、精密測量原理與結構創新 基于電磁場分布重構技術的新型同軸分流器&#xff0c;突破了傳統電流測量的物理限制。該器件采用三維環形電阻矩陣結構&#xff0c;通過多層級導電環的精密排列&#xff0c;實現了電流路徑的渦流自補償。區別于常規分流器的平板式設計&#xff0c;其…

【使用層次序列構建二叉樹(數據結構C)】

使用層次序列構建二叉樹&#xff08;C語言實現&#xff09; 在數據結構學習過程中&#xff0c;二叉樹的構建方式通常有遞歸建樹&#xff08;前序/中序&#xff09;和層次建樹&#xff08;廣度優先&#xff09;兩種。本文將介紹一種基于輔助隊列實現的層次建樹方法&#xff0c;并…

設置Rocky Linux盒蓋不休眠的3個簡單步驟

在 Rocky linux&#xff08;和其他基于 RHEL 的發行版&#xff09;中&#xff0c;當你關閉筆記本電腦的蓋子時&#xff0c;默認行為通常是使系統休眠。如果你想更改這一行為&#xff0c;例如&#xff0c;使系統在關閉蓋子時只是鎖定&#xff0c;你可以按照以下步驟操作&#xf…

WPF的發展歷程

文章目錄 WPF的發展歷程引言起源與背景&#xff08;2001-2006&#xff09;從Avalon到WPF設計目標與創新理念 WPF核心技術特點與架構基礎架構與渲染模型關鍵技術特點MVVM架構模式 WPF在現代Windows開發中的地位與前景當前市場定位與其他微軟UI技術的關系未來發展前景 社區貢獻與…

【器件專題1——IGBT第1講】IGBT:電力電子領域的 “萬能開關”,如何撐起新能源時代?

一、IGBT 是什么&#xff1f;重新認識這個 “低調的電力心臟” 你可能沒聽過 IGBT&#xff0c;但一定用過它驅動的設備&#xff1a;家里的變頻空調、路上的電動汽車、屋頂的光伏逆變器&#xff0c;甚至高鐵和電網的核心部件里&#xff0c;都藏著這個 “電力電子開關的瑞士軍刀”…

新聞速遞丨Altair 與 Databricks 達成合作,加速數據驅動型創新

NEWS Altair 近日宣布與數據和人工智能公司 Databricks 達成戰略合作&#xff0c;通過新一代數據統一化、圖譜驅動智能和企業級人工智能&#xff08;AI&#xff09;技術賦能雙方客戶。 此次合作整合了兩大平臺的核心優勢&#xff0c;將 Altair RapidMiner 平臺的強大功能&…

c++11 :智能指針

目錄 一 為什么需要智能指針&#xff1f; 二 智能指針的使用及原理 1. RAII 2. auto_ptr 3. unique_ptr 4. shared_ptr 5. weak_ptr 三 內存泄漏 1.什么是內存泄漏&#xff0c;內存泄漏的危害 2. 如何避免內存泄漏&#xff1f; 一 為什么需要智能指針&#xff1f; …

大模型在直腸癌預測及治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的 1.3 研究方法與創新點 二、大模型技術概述 2.1 大模型的基本原理 2.2 常見大模型類型及特點 2.3 在醫療領域的應用進展 三、直腸癌預測相關數據收集與處理 3.1 數據來源 3.2 數據清洗與預處理 3.3 特征工程 四、大…

VRRP與防火墻雙機熱備實驗

目錄 實驗一&#xff1a;VRRP負載均衡與故障切換 實驗拓撲?編輯一、實驗配置步驟 1. 基礎網絡配置 2. VRRP雙組配置 二、關鍵驗證命令 1. 查看VRRP狀態 2. 路由表驗證 三、流量分析 正常負載均衡場景&#xff1a; 故障切換驗證&#xff1a; 實驗二&#xff1a;防火…

OpenCV中的SIFT特征提取

文章目錄 引言一、SIFT算法概述二、OpenCV中的SIFT實現2.1 基本使用2.1.1 導入庫2.1.2 圖片預處理2.1.3 創建SIFT檢測器2.1.4 檢測關鍵點并計算描述符2.1.5 檢測關鍵點并計算描述符并對關鍵點可視化2.1.6 印關鍵點和描述符的形狀信息 2.2 參數調優 三、SIFT的優缺點分析3.1 優點…

【信息系統項目管理師】高分論文:論成本管理與采購管理(信用管理系統)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文1、規劃成本管理2、成本估算3、成本預算4、成本控制論文 2019年1月,我作為項目經理參與了 XX基金管理有限公司信用管理系統項目。該項目成 本1000萬,建設期為1年。通過該項目,XX基金管理有限公司在信用…

從邊緣到云端,如何通過時序數據庫 TDengine 實現數據的全局洞

在當今數字化轉型加速的背景下&#xff0c;海量的數據生成和實時處理需求已成為企業面臨的關鍵挑戰。無論是物聯網設備、工業自動化系統&#xff0c;還是智能城市的各類傳感器&#xff0c;數據的采集、傳輸與分析效率&#xff0c;直接影響企業的決策與運營。為此&#xff0c;TD…

Axure全局變量的含義與基礎應用

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:全局變量 主要內容:全局變量含義、基礎應用 應用場景:元件賦值 案例展示: 案例視頻:

題目 3320: 藍橋杯2025年第十六屆省賽真題-產值調整

題目 3320: 藍橋杯2025年第十六屆省賽真題-產值調整 時間限制: 2s 內存限制: 192MB 提交: 549 解決: 122 題目描述 偏遠的小鎮上&#xff0c;三兄弟共同經營著一家小型礦業公司 “兄弟礦業”。公司旗下有三座礦山&#xff1a;金礦、銀礦和銅礦&#xff0c;它們的初始產值分別用…