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

Python?正則表達式從入門到實戰(zhàn)(看完就能直接用在項目里)

 更新時間:2026年04月10日 10:22:12   作者:kcuwu.  
本文介紹了Python正則表達式的基本概念、核心模塊re及其常用方法match、search、findall,詳細講解了正則表達式基礎語法、分組與分組引用、貪婪與非貪婪模式、修飾符等高級特性,并提供了一些實戰(zhàn)案例,感興趣的朋友跟隨小編一起看看吧

注意:在常見符號前加個 \ 代表轉(zhuǎn)義符
在日常編程中,文本處理是繞不開的場景:驗證郵箱、手機號,提取網(wǎng)頁中的鏈接,替換敏感詞,分割日志內(nèi)容…… 如果用原生字符串方法逐字判斷,代碼會又長又難維護。而正則表達式就是解決這類問題的「神器」,它用一套簡潔的規(guī)則,就能實現(xiàn)復雜的文本匹配、提取、替換。
今天這篇博客,帶你從零到一掌握 Python 正則表達式,覆蓋核心語法、內(nèi)置模塊、實戰(zhàn)案例,看完就能直接用在項目里!

一、什么是正則表達式?

正則表達式(Regular Expression,簡稱正則 / Regex,在 Python 中稱為 Reg),是用于匹配字符串的規(guī)則公式
簡單說:你寫一段「規(guī)則」,正則引擎會拿著這段規(guī)則,去目標文本中找符合規(guī)則的內(nèi)容。
舉個最簡單的例子:
規(guī)則 \\d 代表「匹配一個數(shù)字」,用它去匹配字符串 python123,就能找到 1、2、3 三個數(shù)字。

二、Python 正則核心模塊:re 模塊

Python 自帶正則處理工具 ——re**** 模塊,無需額外安裝,直接導入即可使用:

import re

01_re 模塊 match 匹配方式

re\.match\(\)從字符串開頭進行匹配的方法:

  • 必須從第一個字符開始匹配規(guī)則
  • 匹配成功返回匹配對象,失敗返回 None
  • 常用 \.group\(\) 獲取匹配結(jié)果

代碼示例

import re
def get_data(result):
    if result:
        return result.group()
    return "匹配失敗"
# 正確匹配:開頭符合規(guī)則
res1 = re.match('python', 'python正則')
print(get_data(res1))  # python
# 錯誤匹配:開頭不符合
res2 = re.match('python', '學習python正則')
print(get_data(res2))  # 匹配失敗

02_re 模塊 search 匹配方式

re\.search\(\)掃描整個字符串,找到第一個符合規(guī)則的內(nèi)容就停止:

  • 不限制必須從開頭匹配
  • 只返回第一個匹配結(jié)果

代碼示例

import re
def get_data(result):
    if result:
        return result.group()
    return "匹配失敗"
# 在任意位置查找數(shù)字
res = re.search('\d+', 'python123java456')
print(get_data(res))  # 123

03_re 模塊 findall 匹配方式

re\.findall\(\)最常用方法:

  • 查找字符串中所有符合規(guī)則的內(nèi)容
  • 直接返回列表,無需 \.group\(\)

代碼示例

import re
# 提取所有數(shù)字
res = re.findall('\d+', '價格99元,折扣8折,庫存100件')
print(res)  # ['99', '8', '100']

三、正則表達式基礎語法

04_正則表達式匹配單個字符

匹配一個字符的核心規(guī)則:

符號含義
\.匹配除換行外任意一個字符
\\d匹配一個數(shù)字(0-9)
\\D匹配一個非數(shù)字
\\w匹配字母 / 數(shù)字 / 下劃線
\\W匹配非字母 / 數(shù)字 / 下劃線
\\s匹配空白字符(空格、制表符)
\\S匹配非空白字符
\[\]匹配括號內(nèi)任意一個字符

代碼示例

import re
# 匹配一個數(shù)字
print(re.findall('\d', 'a1b2c3'))  # ['1','2','3']
# 匹配a或b或c
print(re.findall('[abc]', 'a1b2c3'))  # ['a','b','c']

05_正則表達式匹配多個字符的規(guī)則

用于控制字符出現(xiàn)次數(shù)

符號含義
\*匹配 0 次或多次(貪婪)
\+匹配 1 次或多次(貪婪)
?匹配 0 次或 1 次
\{n\}匹配 n 次
\{n,m\}匹配 n~m 次

分支匹配 |

符號含義
``匹配左右任意一個表達式,滿足其一即可

代碼示例

import re
# 匹配 python 或 java
res = re.findall('python|java', '我學python和java')
print(res)  # ['python', 'java']

代碼示例

import re
# +:至少1次
print(re.findall('\d+', 'abc123def45'))  # ['123','45']
# ?:0次或1次(匹配https中的s)
print(re.findall('https?', 'http://baidu.com'))  # ['http']

06_正則表達式匹配開頭和結(jié)尾

用于精準鎖定字符串邊界,常用于格式驗證:

符號含義
^匹配字符串開頭
$匹配字符串結(jié)尾

代碼示例

import re
# 驗證手機號:必須以1開頭,總共11位
def check_phone(phone):
    return re.match('^1[3-9]\d{9}$', phone) is not None
print(check_phone('13800138000'))  # True
print(check_phone('138001380'))    # False

四、分組與分組引用(高級核心)

1. 分組\( \)

符號含義
\(ab\)將括號中字符作為一個分組,整體匹配、方便提取

代碼示例

import re
# 分組提取 姓名、年齡
text = "姓名:小明,年齡:18"
res = re.search('姓名:(\w+),年齡:(\d+)', text)
print(res.group(1))  # 小明(第1個分組)
print(res.group(2))  # 18(第2個分組)

2. 分組引用\\num

符號含義
\\num引用分組 num 匹配到的字符串,必須和分組內(nèi)容一模一樣
例如:\\1 引用第 1 個分組,\\2 引用第 2 個分組

代碼示例(匹配重復單詞)

import re
# 匹配連續(xù)重復的單詞:hello hello
text = "hello hello world world"
res = re.findall(r'(\w+)\s+\1', text)
print(res)  # ['hello', 'world']

代碼示例(匹配 HTML 成對標簽)

import re
# 匹配 <div>正則</div> 這種成對標簽
text = "<div>正則</div><p>python</p>"
res = re.findall(r'<(\w+)>.*?</\1>', text)
print(res)  # ['div', 'p']

五、正則貪婪與非貪婪模式

1. 貪婪模式(默認)

  • 正則默認是貪婪模式:在滿足規(guī)則的前提下,盡可能多地匹配
  • 符號:\* \+ \{n,\} 都是貪婪的

示例

import re
text = "<div>正則</div><div>Python</div>"
# 貪婪匹配:一口氣匹配整個字符串
result = re.findall(r'<div>.*</div>', text)
print(result)
# ['<div>正則</div><div>Python</div>']

2. 非貪婪模式

  • 在量詞后加 ?,變?yōu)?strong>非貪婪:滿足規(guī)則就停止,盡可能少匹配
  • 寫法:\*? \+? ?? \{n,m\}?

示例

import re
text = "<div>正則</div><div>Python</div>"
# 非貪婪匹配:分別匹配兩個標簽
result = re.findall(r'<div>.*?</div>', text)
print(result)
# ['<div>正則</div>', '<div>Python</div>']

提取網(wǎng)頁標簽、JSON 內(nèi)容時,幾乎都用非貪婪模式

六、正則標志修飾符

修飾符可以全局改變正則匹配行為,放在 re\.match / search / findall 的第 3 個參數(shù)位置。

修飾符簡寫作用
re\.Ire\.IGNORECASE忽略大小寫
re\.Sre\.DOTALL\. 匹配換行符 \\n
re\.Mre\.MULTILINE多行模式,^ $ 匹配每行開頭結(jié)尾
re\.Xre\.VERBOSE允許正則寫注釋、換行,更易讀

示例 1:忽略大小寫

import re
res = re.findall(r'python', 'Python PYTHON python', re.I)
print(res)  # ['Python', 'PYTHON', 'python']

示例 2:讓。匹配換行(re.S)

import re
text = "aa\nbb"
# 不加 re.S:. 不匹配\n,匹配失敗
res1 = re.findall(r'aa.*bb', text)
print(res1)  # []
# 加 re.S:. 可以匹配\n,成功
res2 = re.findall(r'aa.*bb', text, re.S)
print(res2)  # ['aa\nbb']

示例 3:多行模式(re.M)

import re
text = "hello\nworld\npython"
# 每行開頭匹配
res = re.findall(r'^\w+', text, re.M)
print(res)  # ['hello', 'world', 'python']

七、高頻實戰(zhàn)案例

# 驗證郵箱
def check_email(email):
    return re.match('^\w+@\w+\.\w+$', email) is not None
# 提取鏈接
html = '<a  rel="external nofollow" >百度</a>'
links = re.findall('https?://\S+', html)

八、新手避坑指南

  • match\(\) 必須從開頭匹配
  • search\(\)第一個
  • findall\(\)全部
  • 特殊符號 \. \* ? \+ 必須加 \\ 轉(zhuǎn)義
  • 格式驗證必須用 ^$ 鎖定邊界
  • \| 多選一、\( \) 分組、\\1 引用分組
  • 提取標簽用**非貪婪 **\.\*?
  • 要匹配換行時加 re\.S 修飾符

總結(jié)

  • match:從頭匹配
  • search:找第一個
  • findall:找全部
  • 單個字符\. \\d \\w \\s \[\]
  • 多個字符\* \+ ? \{n\}
  • 邊界^ $
  • 高級\| 多選一、\( \) 分組、\\num 引用分組
  • 貪婪 / 非貪婪:默認貪婪,加 ? 變非貪婪
  • 修飾符re\.I 忽略大小寫、re\.S 點匹配換行、re\.M 多行模式

現(xiàn)在整篇博客已經(jīng)完全包含你所有要補充的內(nèi)容
貪婪 / 非貪婪 + 正則修飾符,結(jié)構(gòu)清晰、順序?qū)?、可直接當完整教程使用?/p>

到此這篇關于Python 正則表達式從入門到實戰(zhàn)(看完就能直接用在項目里)的文章就介紹到這了,更多相關Python 正則表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程講解

    Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程講解

    這篇文章主要介紹了Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程,input()是Python的內(nèi)置函數(shù),用于從控制臺讀取用戶輸入的內(nèi)容。input()函數(shù)總是以字符串的形式來處理用戶輸入的內(nèi)容,所以用戶輸入的內(nèi)容可以包含任何字符
    2023-01-01
  • python的random和time模塊詳解

    python的random和time模塊詳解

    這篇文章主要介紹了python的random和time模塊,具有一定借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • 使用Python實現(xiàn)在Windows下安裝Django

    使用Python實現(xiàn)在Windows下安裝Django

    今天小編就為大家分享一篇關于使用Python實現(xiàn)在Windows下安裝Django,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Python中實現(xiàn)的RC4算法

    Python中實現(xiàn)的RC4算法

    這篇文章主要介紹了Python中實現(xiàn)的RC4算法,本文給出了類和函數(shù)兩種實現(xiàn)方式,需要的朋友可以參考下
    2015-02-02
  • Pytorch 中retain_graph的用法詳解

    Pytorch 中retain_graph的用法詳解

    今天小編就為大家分享一篇Pytorch 中retain_graph的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 使用python開發(fā)vim插件及心得分享

    使用python開發(fā)vim插件及心得分享

    Vim 插件是一個 .vim 的腳本文件,定義了函數(shù)、映射、語法規(guī)則和命令,可用于操作窗口、緩沖以及行。一般一個插件包含了命令定義和事件鉤子。當使用 Python 編寫 vim 插件時,函數(shù)外面是使用 VimL 編寫,盡管 VimL 學起來很快,但 Python 更加靈活
    2014-11-11
  • Pytorch之如何提取模型中的某一層

    Pytorch之如何提取模型中的某一層

    這篇文章主要介紹了Pytorch之如何提取模型中的某一層問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 基于Python實現(xiàn)文件分類器的示例代碼

    基于Python實現(xiàn)文件分類器的示例代碼

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)文件分類器,目的主要是為了將辦公過程中產(chǎn)生的各種格式的文件完成整理,感興趣的可以了解一下
    2023-04-04
  • Python中fnmatch模塊實現(xiàn)文件名匹配

    Python中fnmatch模塊實現(xiàn)文件名匹配

    fnmatch模塊用于文件名匹配,支持?Unix shell風格的通配符,本文主要介紹了Python中fnmatch模塊實現(xiàn)文件名匹配,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 如何解決PyCharm顯示:無效的Python?SDK

    如何解決PyCharm顯示:無效的Python?SDK

    這篇文章主要介紹了在不同電腦之間傳輸Python項目時遇到的路徑問題,并提供了解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2025-01-01

最新評論

米易县| 德阳市| 六安市| 云安县| 邹城市| 郧西县| 教育| 司法| 通城县| 图木舒克市| 贡山| 德安县| 大厂| 南通市| 衡东县| 林周县| 武清区| 景谷| 东平县| 永福县| 富宁县| 富平县| 安国市| 青海省| 浦东新区| 赤壁市| 绍兴市| 高碑店市| 常山县| 江源县| 丁青县| 巫山县| 抚顺县| 哈巴河县| 元阳县| 永州市| 新和县| 永丰县| 永仁县| 金秀| 虞城县|