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

Python re模塊的常用函數(shù)和正則表達(dá)式核心語法

 更新時間:2026年05月07日 09:21:51   作者:曾阿倫  
文章總結(jié)了re模塊的常用函數(shù)、正則語法、場景應(yīng)用、高級技巧及常見問題,介紹了匹配、提取、編譯等函數(shù)及正則表達(dá)式語法,提供了手機號、郵箱等場景示例,并講解了分組提取、非貪婪匹配等高級用法,需要的朋友可以參考下

一、核心前提:re 模塊常用函數(shù)速查

函數(shù)作用核心參數(shù)返回值場景
re.match(pattern, string)從字符串開頭匹配pattern(正則表達(dá)式)、string(目標(biāo)字符串)匹配對象 / None前綴驗證(如手機號、郵箱前綴)
re.search(pattern, string)字符串任意位置匹配(首次)同上匹配對象 / None提取任意位置的目標(biāo)內(nèi)容
re.findall(pattern, string)匹配所有符合規(guī)則的內(nèi)容同上列表(含所有匹配結(jié)果)批量提?。ㄈ缢墟溄?、手機號)
re.finditer(pattern, string)迭代器形式返回所有匹配同上迭代器(含匹配對象)大量數(shù)據(jù)提?。ㄊ?nèi)存)
re.sub(pattern, repl, string)替換匹配內(nèi)容新增 repl(替換字符串 / 函數(shù))替換后的字符串清洗數(shù)據(jù)(如去除特殊字符)
re.compile(pattern)編譯正則表達(dá)式pattern編譯后的正則對象重復(fù)使用同一正則(提效)

關(guān)鍵說明:

  1. 匹配對象常用方法:group()(獲取匹配結(jié)果)、groups()(獲取分組結(jié)果)、span()(獲取匹配位置);
  2. 修飾符:re.I(忽略大小寫)、re.S(. 匹配換行)、re.M(多行匹配),可組合使用(如 re.I | re.S)。

二、正則語法核心片段

語法說明示例匹配結(jié)果
^字符串開頭^1[3-9]匹配以 13-19 開頭的字符串
$字符串結(jié)尾[0-9]$匹配以數(shù)字結(jié)尾的字符串
.匹配任意字符(除換行)a.b匹配 a + 任意字符 + b(如 acb、aab)
*前面字符出現(xiàn) 0-∞ 次ab*匹配 a、ab、abb…
+前面字符出現(xiàn) 1-∞ 次ab+匹配 ab、abb、abbb…
?前面字符出現(xiàn) 0-1 次(非貪婪)ab?匹配 a、ab
{n}前面字符出現(xiàn) n 次a{3}匹配 aaa
{n,m}前面字符出現(xiàn) n-m 次a{2,4}匹配 aa、aaa、aaaa
[]字符集(匹配其中一個)[a-zA-Z0-9]匹配字母 / 數(shù)字
[^]反向字符集[^0-9]匹配非數(shù)字字符
\d匹配數(shù)字(等價 [0-9])\d{3}匹配 123、456…
\D匹配非數(shù)字\D+匹配 abc、中文…
\w匹配字母 / 數(shù)字 / 下劃線\w+匹配 username123、test_abc
\W匹配非字母 / 數(shù)字 / 下劃線\W匹配 @、#、空格…
\s匹配空白字符(空格 / 制表符 / 換行)\s+匹配多個空白
\S匹配非空白字符\S+匹配非空白內(nèi)容
()分組(提取目標(biāo)內(nèi)容)(\d{3})-(\d{4})分組 1 匹配前 3 位,分組 2 匹配后 4 位
``或邏輯`abc

三、場景:判斷與提取

所有場景均基于 re 模塊,直接復(fù)制可用,標(biāo)注「判斷」「提取」明確用途。

場景 1:手機號判斷與提取

  • 規(guī)則:11 位數(shù)字,以 13/14/15/17/18/19 開頭
import re

def check_phone(phone):

   """判斷是否為有效手機號(返回布爾值)"""

   pattern = r'^1[3-9]\d{9}$'  # ^$ 嚴(yán)格匹配整個字符串

   return bool(re.match(pattern, phone))

def extract_phones(text):

   """從文本中提取所有手機號(返回列表)"""

   pattern = r'1[3-9]\d{9}'  # 無需^$,匹配任意位置

   return re.findall(pattern, text)

# 測試

print(check_phone("13812345678"))  # True

print(extract_phones("聯(lián)系電話:13987654321,備用15600001111"))  # ['13987654321', '15600001111']

場景 2:郵箱判斷與提取

  • 規(guī)則:用戶名 @域名(支持字母、數(shù)字、下劃線、點號)
def check_email(email):

   """判斷是否為有效郵箱"""

   pattern = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}$'

   return bool(re.match(pattern, email))

def extract_emails(text):

   """提取文本中所有郵箱"""

   pattern = r'[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}'

   return re.findall(pattern, text)

# 測試

print(check_email("test123@example.com"))  # True

print(extract_emails("郵箱:user_name@qq.com,工作郵箱work.123@gmail.com"))  # ['user_name@qq.com', 'work.123@gmail.com']

場景 3:提取 URL 鏈接

  • 規(guī)則:匹配 http/https 開頭的鏈接
def extract_urls(text):

   pattern = r'https?://[^\s]+'  # http或https開頭,直到空白字符結(jié)束

   return re.findall(pattern, text)

# 測試

text = "推薦網(wǎng)站:https://www.csdn.net,文檔https://docs.python.org"

print(extract_urls(text))  # ['https://www.csdn.net', 'https://docs.python.org']

場景 4:提取身份證號(18 位)

  • 規(guī)則:17 位數(shù)字 + 最后 1 位(數(shù)字 / X/x)
def extract_id_cards(text):

   pattern = r'\d{17}[\dXx]'

   return re.findall(pattern, text)

# 測試

text = "身份證:110101199001011234,備用22020219800202567X"

print(extract_id_cards(text))  # ['110101199001011234', '22020219800202567X']

場景 5:提取中文(含短語)

def extract_chinese(text):

   pattern = r'[\u4e00-\u9fa5]+'  # 中文Unicode范圍

   return re.findall(pattern, text)

# 測試

text = "Python正則表達(dá)式提取中文:你好,世界!123abc"

print(extract_chinese(text))  # ['正則表達(dá)式提取中文', '你好', '世界']

場景 6:提取數(shù)字(整數(shù) + 小數(shù))

def extract_numbers(text):

   pattern = r'-?\d+.?\d*'  # 支持負(fù)數(shù)、整數(shù)、小數(shù)

   return re.findall(pattern, text)

# 測試

text = "價格:99元,折扣價89.9元,虧損-10.5元"

print(extract_numbers(text))  # ['99', '89.9', '-10.5']

場景 7:驗證密碼強度(判斷)

  • 規(guī)則:8-16 位,含字母 + 數(shù)字 + 特殊字符(@#$%^&*)
def check_password_strength(password):

   """判斷密碼是否符合強密碼規(guī)則"""

   # 三個條件同時滿足:長度8-16、含字母、含數(shù)字、含特殊字符

   pattern = r'^(?=.*[a-zA-Z])(?=.*\d)(?=.*[@#$%^&*])[a-zA-Z0-9@#$%^&*]{8,16}$'

   return bool(re.match(pattern, password))

# 測試

print(check_password_strength("Test123@"))  # True

print(check_password_strength("weakpassword"))  # False(無數(shù)字和特殊字符)

四、高級技巧:分組提取與非貪婪匹配

1. 分組提取

例如:提取「姓名:張三,年齡:25」中的姓名和年齡

text = "用戶信息:姓名:張三,年齡:25,性別:男"

pattern = r'姓名:([^\u4e00-\u9fa5]+),年齡:(\d+)'  # 分組1匹配姓名,分組2匹配年齡

result = re.search(pattern, text)

if result:

   name = result.group(1)

   age = result.group(2)

   print(f"姓名:{name},年齡:{age}")  # 姓名:張三,年齡:25

2. 非貪婪匹配

問題:.* 默認(rèn)貪婪(匹配盡可能多的內(nèi)容),需用 .*? 非貪婪

例如,正則表達(dá)式 a.*b 在字符串 ‘a123b456b’ 中,.* 會一口氣吃掉從第一個 a 之后到最后一個 b 之前的所有字符,最終匹配的是 ‘a123b456b’ 整個子串,而不是我們可能期望的 ‘a123b’。

非貪婪匹配:在量詞后面加上 ?,量詞會盡可能少地重復(fù)匹配,只要能讓整個表達(dá)式匹配成功。正則表達(dá)式改為 a.*?b ,得到 ‘a123b’。

貪婪寫法非貪婪寫法說明
**?零次或多次,盡可能少
++?一次或多次,盡可能少
???零次或一次,傾向于零次
{m,n}{m,n}?至少 m 次,至多 n 次,盡可能少
# 提取 HTML 標(biāo)簽內(nèi)容
html = '<div>第一段</div><div>第二段</div>'

# 貪婪匹配:.* 會匹配到最后一個 </div>
greedy_tags = re.findall(r'<div>(.*)</div>', html)
print("貪婪匹配提取內(nèi)容:", greedy_tags)   # 輸出: ['第一段</div><div>第二段']

# 非貪婪匹配:.*? 只匹配到最近的 </div>
non_greedy_tags = re.findall(r'<div>(.*?)</div>', html)
print("非貪婪匹配提取內(nèi)容:", non_greedy_tags)  # 輸出: ['第一段', '第二段']

在正則表達(dá)式中,? 有兩種用法:

  • 作為普通量詞,表示“零次或一次”(貪婪)。
  • 跟在其他量詞后面,表示將貪婪變?yōu)榉秦澙罚☉卸瑁?/li>

例如:

  • .*? 表示“任意字符重復(fù)零次或多次,但盡可能少”。
  • .+? 表示“任意字符重復(fù)一次或多次,但盡可能少”。
  • a?? 表示“匹配一個 a 或零個 a,但優(yōu)先零個”。
# ?? 示例:匹配兩個字符,但盡可能少
print(re.findall(r'a??', 'aa'))   # 輸出: ['', 'a', '']  因為第一個位置優(yōu)先匹配0個a

五、常見問題與避坑指南

  1. 匹配不到換行符

問題:. 默認(rèn)不匹配換行,需加修飾符 re.S

示例:re.search(r'a.b', 'a\nb', re.S) → 匹配成功

  1. 忽略大小寫匹配

加修飾符 re.I,示例:re.match(r'abc', 'ABC', re.I) → 匹配成功

  1. 正則中有特殊字符(如 . * ?)

需轉(zhuǎn)義(加 \)或用 re.escape() 自動轉(zhuǎn)義

示例:匹配 www.baidu.compattern = r'www\.baidu\.com'pattern = re.escape('www.baidu.com')

  1. 重復(fù)使用同一正則

re.compile() 編譯,提升效率

示例:

pattern = re.compile(r'1[3-9]\d{9}')

print(pattern.match("13812345678"))  # 直接使用編譯后的對象

print(pattern.findall("聯(lián)系電話13987654321"))

六、常用

需求正則表達(dá)式Python 代碼片段
判斷手機號^1[3-9]\d{9}$re.match(r'^1[3-9]\d{9}$', phone)
判斷郵箱^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}$re.match(r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}$', email)
提取手機號1[3-9]\d{9}re.findall(r'1[3-9]\d{9}', text)
提取郵箱[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}re.findall(r'[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z]{2,6}', text)
提取中文[\u4e00-\u9fa5]+re.findall(r'[\u4e00-\u9fa5]+', text)
提取數(shù)字(含小數(shù))-?\d+.?\d*re.findall(r'-?\d+.?\d*', text)
提取 URLhttps?://[^\s]+re.findall(r'https?://[^\s]+', text)

以上就是Python正則表達(dá)式備忘錄判斷與提取核心用法的詳細(xì)內(nèi)容,更多關(guān)于Python正則表達(dá)式備忘錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python單元測試簡單示例

    Python單元測試簡單示例

    這篇文章主要介紹了Python單元測試,結(jié)合實例形式分析了Python單元測試的簡單定義、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-07-07
  • Python實現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    Python實現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    這篇文章主要介紹了通過Python實現(xiàn)將MP3音頻轉(zhuǎn)為WAV格式的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,感興趣的可以了解一下
    2021-12-12
  • Python3.6 + TensorFlow 安裝配置圖文教程(Windows 64 bit)

    Python3.6 + TensorFlow 安裝配置圖文教程(Windows 64 bit)

    這篇文章主要介紹了Python3.6 + TensorFlow 安裝配置的教程(Windows 64 bit),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python爬取微博評論的實例講解

    python爬取微博評論的實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬取微博評論的實例講解,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • 在Python中獲取兩數(shù)相除的商和余數(shù)方法

    在Python中獲取兩數(shù)相除的商和余數(shù)方法

    今天小編就為大家分享一篇在Python中獲取兩數(shù)相除的商和余數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法

    在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法

    這篇文章主要介紹了在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法,本文示例基于debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)數(shù)據(jù)可視化大屏布局的示例詳解

    Python實現(xiàn)數(shù)據(jù)可視化大屏布局的示例詳解

    數(shù)據(jù)可視化大屏展示需求無疑是對數(shù)據(jù)分析結(jié)果最好的詮釋,能夠使得別人能夠輕松的就理解我們的數(shù)據(jù)意圖。本文將通過pyecharts模塊來實現(xiàn),感興趣的可以了解一下
    2022-11-11
  • import?paddle報錯的成功解決方法

    import?paddle報錯的成功解決方法

    最近安裝paddle的時候遇到了些問題,這里給大家總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于import?paddle報錯的成功解決方法,需要的朋友可以參考下
    2023-06-06
  • python中的隨機數(shù)?Random介紹

    python中的隨機數(shù)?Random介紹

    這篇文章主要介紹了python中的隨機數(shù)?Random,Python標(biāo)準(zhǔn)庫中的random函數(shù),可以生成隨機浮點數(shù)、整數(shù)、字符串,甚至幫助你隨機選擇列表序列中的一個元素,打亂一組數(shù)據(jù)等,即用來生成隨機數(shù),下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • Python基于火山引擎豆包大模型搭建QQ機器人詳細(xì)教程(2024年最新)

    Python基于火山引擎豆包大模型搭建QQ機器人詳細(xì)教程(2024年最新)

    這篇文章主要介紹了Python基于火山引擎豆包大模型搭建QQ機器人詳細(xì)的相關(guān)資料,包括開通模型、配置APIKEY鑒權(quán)和SDK安裝等步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評論

万州区| 香港 | 宜昌市| 南川市| 宝坻区| 大英县| 巨野县| 澜沧| 泗水县| 红桥区| 奉化市| 渭南市| 宝应县| 茌平县| 井研县| 平昌县| 南涧| 宿松县| 东明县| 东阿县| 黄冈市| 恩施市| 芦溪县| 砀山县| 平顺县| 微博| 新竹市| 林芝县| 定州市| 宁陕县| 越西县| 周口市| 法库县| 探索| 壤塘县| 云梦县| 赣榆县| 措勤县| 南宁市| 本溪市| 富顺县|