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

Python re 庫從入門到高階用法詳解

 更新時間:2025年09月05日 11:42:30   作者:小小小CTF_er  
re庫是 Python 處理字符串的強大工具,掌握它可以極大提高字符串處理效率,本文從基礎(chǔ)函數(shù)到高級特性,涵蓋了re庫的主要用法,感興趣的朋友跟隨小編一起看看吧

Python re 庫詳解:從入門到高階

正則表達式是處理字符串的強大工具,Python 的re模塊提供了對正則表達式的全面支持。本文將從基礎(chǔ)到高階詳細講解re庫的使用,并通過實例幫助理解。

一、入門:正則表達式基礎(chǔ)與 re 庫核心函數(shù)

1. 基本概念

正則表達式是由普通字符和特殊字符 (元字符) 組成的字符串模式,用于匹配字符串。

2. 核心函數(shù)

2.1re.match()- 從字符串開頭匹配

嘗試從字符串的起始位置匹配一個模式,若匹配成功返回匹配對象,否則返回 None。

import re
# 示例1:匹配成功
result = re.match(r'hello', 'hello world')
print(result.group())  # 輸出: hello
# 示例2:匹配失?。ú皇菑拈_頭匹配)
result = re.match(r'world', 'hello world')
print(result)  # 輸出: None

練習(xí)題:驗證一個字符串是否以字母開頭

def starts_with_letter(s):
    return bool(re.match(r'^[a-zA-Z]', s))
print(starts_with_letter("hello"))  # True
print(starts_with_letter("123hello"))  # False
2.2re.search()- 在整個字符串中搜索匹配

掃描整個字符串并返回第一個成功的匹配。

import re
# 示例:在整個字符串中查找
result = re.search(r'world', 'hello world')
print(result.group())  # 輸出: world

練習(xí)題:檢查字符串中是否包含數(shù)字

def has_number(s):
    return bool(re.search(r'\d', s))
print(has_number("hello123"))  # True
print(has_number("helloworld"))  # False
2.3re.findall()- 找到所有匹配項

找到所有匹配的子串,并以列表形式返回。

import re
# 示例:找到所有數(shù)字
result = re.findall(r'\d+', 'age: 25, score: 98, weight: 65')
print(result)  # 輸出: ['25', '98', '65']

練習(xí)題:提取字符串中所有的郵箱地址

def extract_emails(s):
    return re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', s)
text = "聯(lián)系我們: info@example.com, 銷售: sales@company.org"
print(extract_emails(text))  # ['info@example.com', 'sales@company.org']
2.4re.sub()- 替換匹配項

替換字符串中所有匹配的子串。

import re
# 示例:替換所有數(shù)字為*
result = re.sub(r'\d+', '*', 'age: 25, score: 98')
print(result)  # 輸出: age: *, score: *

練習(xí)題:將字符串中的敏感信息(電話)打碼

def mask_phone(s):
    return re.sub(r'1[3-9]\d{9}', '1xxxxxxxxx', s)
text = "我的電話是13812345678,他的電話是13987654321"
print(mask_phone(text))  # 我的電話是1xxxxxxxxx,他的電話是1xxxxxxxxx

二、進階:正則表達式元字符與模式

1. 常用元字符

元字符

描述

.

匹配任意字符(除換行符)

^

匹配字符串開頭

$

匹配字符串結(jié)尾

*

匹配前一個字符 0 次或多次

+

匹配前一個字符 1 次或多次

?

匹配前一個字符 0 次或 1 次

{n}

匹配前一個字符恰好 n 次

{n,}

匹配前一個字符至少 n 次

{n,m}

匹配前一個字符 n 到 m 次

[]

字符集,匹配其中任意一個字符

`

`

匹配左右任意一個表達式

()

分組,將括號內(nèi)的作為一個整體

2. 特殊序列

序列

描述

\d

匹配任意數(shù)字,等價于 [0-9]

\D

匹配任意非數(shù)字

\s

匹配任意空白字符

\S

匹配任意非空白字符

\w

匹配字母、數(shù)字、下劃線

\W

匹配非字母、數(shù)字、下劃線

\b

匹配單詞邊界

3. 實例練習(xí)

3.1 匹配 IP 地址
import re
def is_valid_ip(ip):
    pattern = r'^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$'
    return bool(re.match(pattern, ip))
print(is_valid_ip("192.168.1.1"))  # True
print(is_valid_ip("256.0.0.1"))    # False
3.2 提取 HTML 標簽內(nèi)容
import re
def extract_tag_content(html, tag):
    pattern = rf'<{tag}>(.*?)</{tag}>'
    return re.findall(pattern, html, re.DOTALL)
html = '''
<div>第一部分</div>
<div>第二部分</div>
<p>這是段落</p>
'''
print(extract_tag_content(html, 'div'))  # ['第一部分', '第二部分']

三、高階:編譯正則表達式與高級特性

1.re.compile()- 編譯正則表達式

編譯正則表達式為模式對象,可提高多次使用的效率。

import re
# 編譯正則表達式
pattern = re.compile(r'\d+')
# 使用編譯后的模式
print(pattern.findall('age: 25, score: 98'))  # ['25', '98']
print(pattern.sub('*', 'age: 25, score: 98'))  # age: *, score: *

2. 匹配對象的方法

當匹配成功時,match()search()返回匹配對象,包含以下常用方法:

  • group(): 返回匹配的字符串
  • start(): 返回匹配的起始位置
  • end(): 返回匹配的結(jié)束位置
  • span(): 返回匹配的起始和結(jié)束位置的元組
import re
result = re.search(r'(\d+)-(\d+)-(\d+)', '今天是2023-10-05')
print(result.group())   # 2023-10-05
print(result.group(1))  # 2023
print(result.group(2))  # 10
print(result.group(3))  # 05
print(result.span())    # (3, 13)

3. 貪婪與非貪婪匹配

正則表達式默認是貪婪的,會盡可能匹配最長的字符串。在量詞后加?可啟用非貪婪模式。

import re
# 貪婪匹配
text = '<div>內(nèi)容1</div><div>內(nèi)容2</div>'
print(re.findall(r'<div>(.*)</div>', text))  # ['內(nèi)容1</div><div>內(nèi)容2']
# 非貪婪匹配
print(re.findall(r'<div>(.*?)</div>', text))  # ['內(nèi)容1', '內(nèi)容2']

4. 標志參數(shù)

re模塊的函數(shù)支持標志參數(shù),常用的有:

  • re.IGNORECASEre.I: 忽略大小寫
  • re.DOTALLre.S: 使.匹配包括換行符在內(nèi)的所有字符
  • re.MULTILINEre.M: 多行模式
import re
# 忽略大小寫
print(re.findall(r'hello', 'Hello HELLO hello', re.IGNORECASE))
# ['Hello', 'HELLO', 'hello']
# 多行模式
text = 'line1\nline2\nline3'
print(re.findall(r'^line', text, re.MULTILINE))  # ['line', 'line', 'line']

5. 高階練習(xí)題

5.1 解析 URL 參數(shù)
import re
def parse_url_params(url):
    params = {}
    # 提取參數(shù)部分
    match = re.search(r'\?(.*)$', url)
    if match:
        param_str = match.group(1)
        # 分割參數(shù)
        param_list = re.split(r'&', param_str)
        for param in param_list:
            # 分割鍵值對
            key_value = re.split(r'=', param, 1)
            if len(key_value) == 2:
                params[key_value[0]] = key_value[1]
    return params
url = "https://example.com/search?query=python&page=2&sort=desc"
print(parse_url_params(url))
# {'query': 'python', 'page': '2', 'sort': 'desc'}
5.2 驗證密碼強度
import re
def check_password_strength(password):
    # 至少8個字符,包含大小寫字母、數(shù)字和特殊字符
    if len(password) < 8:
        return "弱:密碼長度不足8位"
    strength = 0
    if re.search(r'[A-Z]', password):
        strength += 1
    if re.search(r'[a-z]', password):
        strength += 1
    if re.search(r'\d', password):
        strength += 1
    if re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
        strength += 1
    if strength == 4:
        return "強:密碼強度良好"
    elif strength >= 2:
        return "中:密碼強度一般"
    else:
        return "弱:密碼組成太簡單"
print(check_password_strength("123456"))       # 弱:密碼長度不足8位
print(check_password_strength("abcdefgh"))     # 弱:密碼組成太簡單
print(check_password_strength("Abcdefgh"))     # 中:密碼強度一般
print(check_password_strength("Abcdefgh123"))  # 中:密碼強度一般
print(check_password_strength("Abc@12345"))    # 強:密碼強度良好

四、總結(jié)

re庫是 Python 處理字符串的強大工具,掌握它可以極大提高字符串處理效率。本文從基礎(chǔ)函數(shù)到高級特性,涵蓋了re庫的主要用法:

  1. 入門:掌握match()、search()findall()、sub()等核心函數(shù)
  2. 進階:熟悉元字符、特殊序列和常用模式
  3. 高階:學(xué)會編譯正則表達式、處理匹配對象、使用貪婪 / 非貪婪模式和標志參數(shù)

正則表達式的學(xué)習(xí)需要多練習(xí),通過實際問題來加深理解和記憶。隨著實踐的增多,你會發(fā)現(xiàn)正則表達式在文本處理中的巨大價值。

到此這篇關(guān)于Python re 庫詳解:從入門到高階的文章就介紹到這了,更多相關(guān)Python re 庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用PyGame繪制圖像并保存為圖片文件的方法

    python使用PyGame繪制圖像并保存為圖片文件的方法

    這篇文章主要介紹了python使用PyGame繪制圖像并保存為圖片文件的方法,涉及Python使用PyGame操作圖片的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • 蘋果Macbook Pro13 M1芯片安裝Pillow的方法步驟

    蘋果Macbook Pro13 M1芯片安裝Pillow的方法步驟

    Pillow作為python的第三方圖像處理庫,提供了廣泛的文件格式支持,本文主要介紹了蘋果Macbook Pro13 M1芯片安裝Pillow,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • Python參數(shù)傳遞及收集機制原理解析

    Python參數(shù)傳遞及收集機制原理解析

    這篇文章主要介紹了Python參數(shù)傳遞及收集機制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python中的CURL PycURL使用例子

    Python中的CURL PycURL使用例子

    這篇文章主要介紹了Python中的CURL PycURL使用例子,需要的朋友可以參考下
    2014-06-06
  • Python使用folium excel繪制point

    Python使用folium excel繪制point

    今天小編就為大家分享一篇關(guān)于Python使用folium excel繪制point,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Pycharm小白級簡單使用教程

    Pycharm小白級簡單使用教程

    pycharm是一種Python IDE,能夠幫助我們在編寫代碼時提高效率。 這篇文章主要介紹了Pycharm小白級簡單使用教程,需要的朋友可以參考下
    2020-01-01
  • pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié)

    pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié)

    本文主要介紹了pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 用Python將IP地址在整型和字符串之間輕松轉(zhuǎn)換

    用Python將IP地址在整型和字符串之間輕松轉(zhuǎn)換

    這篇文章主要給大家介紹了利用Python將IP在整型和字符串之間輕松轉(zhuǎn)換的相關(guān)資料,文中還跟大家分享了Python下利用正則表達式來匹配校驗一個字符串是否為ip地址的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Pandas查詢數(shù)據(jù)df.query的使用

    Pandas查詢數(shù)據(jù)df.query的使用

    本文主要介紹了Pandas查詢數(shù)據(jù)df.query的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python實現(xiàn)最長公共子序列

    python實現(xiàn)最長公共子序列

    這篇文章主要為大家詳細介紹了python實現(xiàn)最長公共子序列的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

鹤壁市| 余庆县| 凌源市| 习水县| 靖宇县| 苍梧县| 南江县| 丰顺县| 潞西市| 孟连| 清流县| 乐都县| 梁平县| 徐水县| 太仆寺旗| 安阳县| 绥化市| 黎川县| 岑溪市| 休宁县| 巢湖市| 郎溪县| 磐石市| 彭阳县| 灵璧县| 仁寿县| 扶沟县| 乌兰浩特市| 东丰县| 吴堡县| 金溪县| 宝应县| 临潭县| 西华县| 阜康市| 通州市| 陆丰市| 遂宁市| 阿巴嘎旗| 鲜城| 泰安市|