Python正則表達式入門從匹配手機號到提取文本內容的實戰(zhàn)教學
一、前言:為什么要學正則表達式?
在日常Python開發(fā)、數據處理、爬蟲工作中,我們經常會遇到這些高頻需求:
- 從雜亂文本中精準提取手機號、郵箱、身份證
- 批量替換文本中的數字、特殊符號、敏感詞
- 按照多種不規(guī)則分隔符拆分字符串
- 校驗用戶輸入的賬號、密碼、網址格式是否合法
- 提取簡單HTML、文本標簽中的核心內容
普通字符串方法只能處理規(guī)則固定的簡單場景,而正則表達式可以通過一套通用規(guī)則,適配所有復雜文本處理場景,是Python文本處理的必備核心技能。
Python 內置 re 模塊,無需額外安裝,開箱即用,本文從零帶你吃透正則基礎,手把手實現實戰(zhàn)案例。
二、環(huán)境準備:導入re模塊
Python 正則操作全部依賴內置 re 模塊,使用前只需導入即可:
import re
re 是 regular expression 的縮寫,核心作用:自定義字符規(guī)則,實現字符串的匹配、查找、替換、分割。
三、五大核心方法實戰(zhàn)(零基礎必掌握)
3.1 re.search():查找第一個匹配項
作用:掃描整個字符串,返回第一個匹配成功的結果,匹配失敗返回 None。
核心注意:必須判斷結果非空后,再調用 .group() 獲取匹配內容,避免報錯。
案例1:文本中提取手機號
import re
text = "我的手機號是 13812345678,郵箱是 test@example.com"
# 手機號正則:1開頭,第二位3-9,后接9位數字
phone = re.search(r"1[3-9]\d{9}", text)
if phone:
print(f"找到手機號:{phone.group()}")
# 輸出:找到手機號:13812345678
正則規(guī)則解析
1:手機號固定以1開頭[3-9]:第二位數字范圍3-9(符合國內手機號規(guī)則)\d{9}:匹配9位數字(剩余手機號位數)
案例2:文本中提取郵箱
import re
text = "我的手機號是 13812345678,郵箱是 test@example.com"
email = re.search(r"\w+@\w+\.\w+", text)
if email:
print(f"找到郵箱:{email.group()}")
# 輸出:找到郵箱:test@example.com
郵箱正則規(guī)則解析
\w+:匹配1個及以上字母、數字、下劃線(郵箱用戶名)@:精準匹配郵箱固定符號\w+:匹配域名主體\.:轉義匹配點號(正則中.是任意字符,必須轉義才是普通點)\w+:匹配郵箱后綴(com、cn、net等)
3.2 re.findall():查找所有匹配項(批量提?。?/h3>
作用:查找字符串中所有匹配內容,以列表形式返回,無匹配則返回空列表,是批量提取文本的高頻方法。
案例:批量提取文本中所有數字價格
import re text = "商品價格:100元、200元、350元、89.9元" # \d+ 匹配連續(xù)數字 prices = re.findall(r"\d+", text) print(prices) # 輸出:['100', '200', '350', '89', '9']
適合場景:批量提取數字、關鍵詞、特殊格式文本,比循環(huán)匹配效率高10倍以上。
3.3 re.sub():正則替換字符串
作用:根據正則規(guī)則匹配內容,批量替換為指定字符,完美解決普通replace無法處理的模糊替換場景。
語法:re.sub(pattern, replacement, string)
- pattern:正則匹配規(guī)則
- replacement:替換后的內容
string:需要處理的原字符串
案例:批量隱藏日期數字
import re text = "今天是2026年02月19日,訂單編號20260219001" # 所有連續(xù)數字替換為X result = re.sub(r"\d+", "X", text) print(result) # 輸出:今天是X年X月X日,訂單編號X
3.4 re.split():多分隔符拆分字符串
痛點:Python原生 split() 僅支持單一分隔符,無法處理不規(guī)則分隔的文本。
解決方案:re.split() 支持多分隔符、不規(guī)則空白拆分。
案例:拆分含分號、逗號、空格的文本
import re text = "張三;李四,王五 趙六 錢七;孫八" # 匹配分號、逗號、空白字符,多個分隔符合并拆分 names = re.split(r"[;,\s]+", text) print(names) # 輸出:['張三', '李四', '王五', '趙六', '錢七', '孫八']
規(guī)則解析:[;,\s]+
[]:字符集合,匹配集合內任意一個字符; , \s:分別匹配分號、逗號、空白字符(空格、換行、制表符)+:匹配1個及以上連續(xù)字符,避免拆分空值
3.5 re.match():精準校驗文本格式
作用:從字符串開頭嚴格匹配,適合做格式校驗(手機號、郵箱、賬號),必須整串符合規(guī)則才會匹配成功。
核心搭配:^(開頭)+ $(結尾)實現全局精準校驗。
案例1:完整手機號格式校驗
import re
# 全局手機號校驗規(guī)則
phone_pattern = r"^1[3-9]\d{9}$"
print(re.match(phone_pattern, "13812345678")) # 匹配成功
print(re.match(phone_pattern, "138123456")) # 位數不足,匹配失敗
print(re.match(phone_pattern, "23812345678")) # 開頭錯誤,匹配失敗
案例2:通用郵箱格式校驗
import re # 適配絕大多數常規(guī)郵箱格式 email_pattern = r"^[\w.+-]+@[\w-]+\.[\w.]+$" print(re.match(email_pattern, "test@example.com")) # 合法 print(re.match(email_pattern, "test123@qq.com")) # 合法 print(re.match(email_pattern, "test.com")) # 非法
提示:業(yè)務簡單格式校驗可使用該正則,正式生產郵件校驗需結合發(fā)送驗證。
四、進階實戰(zhàn):提取HTML標簽內容
利用正則分組+非貪婪匹配,可快速提取簡單HTML標簽文本,適合輕量文本解析。
import re html = "<h1>Python正則入門教程</h1><p>零基礎快速掌握正則用法</p>" # 分組匹配標簽內容,? 開啟非貪婪匹配 contents = re.findall(r"<\w+>(.*?)</\w+>", html) print(contents) # 輸出:['Python正則入門教程', '零基礎快速掌握正則用法']
核心規(guī)則解析
<\w+>:匹配任意HTML開始標簽(.*?):分組+非貪婪匹配,精準提取標簽內文本(核心!避免多標簽串匹配)</\w+>:匹配任意HTML結束標簽
重要提醒:正則僅適合簡單靜態(tài)HTML片段,復雜爬蟲解析請使用 BeautifulSoup、lxml 專業(yè)庫。
五、正則基礎符號速查表(收藏必備)
| 正則符號 | 詳細含義 |
|---|---|
. | 匹配任意單個字符(換行符除外) |
\d | 匹配任意數字,等價于 [0-9] |
\D | 匹配任意非數字字符 |
\w | 匹配字母、數字、下劃線 |
\W | 匹配非字母、非數字、非下劃線 |
\s | 匹配空白字符(空格、換行、制表符) |
\S | 匹配非空白字符 |
^ | 匹配字符串開頭 |
$ | 匹配字符串結尾 |
* | 匹配前面字符 0次或多次 |
+ | 匹配前面字符 1次或多次 |
? | 匹配前面字符 0次或1次,開啟非貪婪匹配 |
{n} | 精準匹配前面字符 n 次 |
{n,m} | 匹配前面字符 n~m 次 |
[] | 字符集合,匹配集合內任意單個字符 |
() | 分組匹配,精準提取分組內內容 |
六、五大核心方法選型指南
新手不用死記硬背,根據需求直接選:
| 方法 | 適用場景 |
|---|---|
re.search() | 查找第一個匹配內容 |
re.match() | 字符串整體格式校驗(從頭匹配) |
re.findall() | 批量查找所有匹配內容(最常用) |
re.sub() | 批量替換文本內容 |
re.split() | 多分隔符、不規(guī)則文本拆分 |
七、新手必看:為什么正則前要加 r?
大家會發(fā)現所有案例中,正則表達式都寫為 r"\d+" 原始字符串格式。
核心作用:r 代表原生字符串,屏蔽Python轉義機制,避免正則符號雙重轉義報錯。
如果不添加 r,復雜正則中的\d、\s 容易被Python解析為轉義字符,導致正則規(guī)則失效。
編碼好習慣:所有Python正則表達式,統(tǒng)一使用 r"正則規(guī)則" 格式!
八、全文總結
本文從零入門Python正則表達式,覆蓋開發(fā)90%基礎場景,核心知識點復盤:
- 掌握 search/findall/sub/split/match 五大核心方法,適配查找、替換、拆分、校驗全場景
- 熟記 \d、\w、\s、+、*、?、^、$ 基礎符號,可完成絕大多數文本匹配
- 手機號、郵箱、HTML內容提取為通用實戰(zhàn)模板,可直接復用
- 正則優(yōu)先使用
r""原始字符串,規(guī)避轉義問題 - 簡單文本解析用正則,復雜網頁解析用專業(yè)爬蟲庫
正則看似是符號密碼,實則規(guī)則固定,熟練后可以極大提升文本處理效率,是Python數據分析、爬蟲、自動化開發(fā)的必備技能!
到此這篇關于Python正則表達式入門從匹配手機號到提取文本內容的實戰(zhàn)教學的文章就介紹到這了,更多相關Python正則表達式匹配手機號內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決pyecharts在jupyter notebook中使用報錯問題
這篇文章主要介紹了解決pyecharts在jupyter notebook中使用報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python GUI庫圖形界面開發(fā)之PyQt5時間控件QTimer詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5時間控件QTimer詳細使用方法與實例,需要的朋友可以參考下2020-02-02
Python利用pandas和matplotlib實現繪制堆疊柱狀圖
在數據可視化中,堆疊柱狀圖是一種常用的圖表類型,它能夠清晰地展示多個類別的數據,本文將演示如何使用 Python 的 pandas 和 matplotlib 庫繪制優(yōu)化的堆疊柱狀圖,需要的可以參考下2023-11-11
python使用opencv resize圖像不進行插值的操作
這篇文章主要介紹了python使用opencv resize圖像不進行插值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

