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

Python使用正則表達式實現(xiàn)從文本清洗到復(fù)雜信息提取的實戰(zhàn)指南

 更新時間:2026年05月29日 09:06:15   作者:我材不敲代碼  
在數(shù)據(jù)分析、爬蟲、日志解析、表單校驗等開發(fā)場景中,正則表達式是處理文本的利器,本文深入解析Python正則表達式,覆蓋格式校驗、批量提取、脫敏替換等場景,通過身份證、URL、中文提取等實戰(zhàn)案例,助你掌握正則進階用法,需要的朋友可以參考下

引言

在數(shù)據(jù)分析、爬蟲、日志解析、表單校驗等開發(fā)場景中,正則表達式是處理文本的利器。相比于基礎(chǔ)字符串方法,正則能精準(zhǔn)實現(xiàn)模糊匹配、批量提取、復(fù)雜替換等操作。

Python 內(nèi)置 re 模塊,無需額外安裝第三方庫,開箱即用。本文在基礎(chǔ)用法之上,結(jié)合身份證、URL、中文提取、日志清洗、貪婪與非貪婪匹配等高頻實戰(zhàn)案例,帶你吃透正則進階用法,輕松解決日常文本處理難題。

1. 模塊導(dǎo)入與核心概念

使用正則第一步,導(dǎo)入內(nèi)置 re 模塊:

import re

正則本質(zhì)是用一套符號規(guī)則描述字符串模式,支持匹配、查找、提取、替換、分割。 寫正則強烈建議使用原始字符串 r"",避免反斜杠 \ 雙重轉(zhuǎn)義,這是 Python 正則的最佳實踐。

2. re.match:精準(zhǔn)校驗完整字符串

re.match(pattern, string)字符串開頭匹配,適合做格式校驗,比如身份證、手機號、賬號密碼格式驗證。

實戰(zhàn):校驗 18 位身份證號

身份證規(guī)則:前 17 位數(shù)字,最后一位可為數(shù)字或 X/x

id_card_pattern = r"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$"
print(re.match(id_card_pattern, "34012320000101123X"))  # 匹配成功
print(re.match(id_card_pattern, "123456"))  # 匹配失敗

規(guī)則拆解:

  • ^:字符串開頭,$:字符串結(jié)尾,嚴(yán)格匹配完整文本
  • [1-9]\d{5}:6 位地區(qū)碼
  • (19|20)\d{2}:出生年份 19/20 開頭
  • 后續(xù)匹配月、日、順序碼 + 校驗位

注意:match 只從開頭匹配,想在全文找內(nèi)容用 search

3. re.search:全文查找首個匹配項

re.search() 掃描整個字符串,找到第一個符合規(guī)則的內(nèi)容就返回,適合從雜亂文本中提取單個信息。

實戰(zhàn):提取文本中的 URL 鏈接

text = "我的博客:https://blog.csdn.net,備用網(wǎng)址:http://www.example.com"
url = re.search(r"https?://\w+\.\w+", text)
if url:
    print("提取到URL:", url.group())

輸出:

提取到URL: https://blog.csdn.net

正則解析:

  • https?? 匹配 0 次或 1 次,兼容 http/https
  • ://:固定協(xié)議符號
  • \w+\.\w+:匹配域名主體 + 后綴

4. re.findall:批量提取所有匹配內(nèi)容

re.findall()最常用的提取方法,掃描全文,返回所有匹配結(jié)果的列表,適合批量提取數(shù)字、關(guān)鍵詞、鏈接、中文等。

實戰(zhàn) 1:提取所有中文

text = "Python正則2026實戰(zhàn),提取中文,123測試數(shù)據(jù)"
chinese_list = re.findall(r"[\u4e00-\u9fa5]+", text)
print(chinese_list)

輸出:

['正則', '實戰(zhàn)', '提取中文', '測試數(shù)據(jù)']

[\u4e00-\u9fa5] 是 Unicode 編碼,匹配所有中文字符。

實戰(zhàn) 2:提取所有數(shù)字

text = "訂單1:599元,訂單2:1299元,運費20元"
nums = re.findall(r"\d+", text)
print(nums)  # ['599', '1299', '20']

5. re.sub:高級文本替換與脫敏

re.sub(pattern, repl, string, count=0) 實現(xiàn)批量替換,可用于數(shù)據(jù)脫敏、清洗無用字符、格式化文本。

實戰(zhàn) 1:手機號脫敏

text = "用戶1:13812345678,用戶2:15987654321"
# 中間4位替換為****
result = re.sub(r"(1[3-9]\d)\d{4}(\d{4})", r"\1****\2", text)
print(result)

輸出:

plaintext

用戶1:138****5678,用戶2:159****4321

核心:() 分組,\1、\2 反向引用分組內(nèi)容,精準(zhǔn)替換中間位。

實戰(zhàn) 2:清除文本中的特殊符號

text = "你好!@#¥%Python正則&*實戰(zhàn)~"
result = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9]", "", text)
print(result)  # 你好Python正則實戰(zhàn)

[^...] 表示指定字符,清除所有非中文、非英文、非數(shù)字的符號。

6. re.split:多規(guī)則分割字符串

Python 原生 split() 只能按單個分隔符拆分,re.split() 支持多個分隔符、不定數(shù)量分隔符,處理臟數(shù)據(jù)更高效。

實戰(zhàn):分割雜亂日志文本

log = "2026-05-23;INFO,用戶登錄 賬號:test 狀態(tài):成功"
# 按分號、逗號、空格分割
parts = re.split(r"[;,\s]+", log)
print(parts)

輸出:

['2026-05-23', 'INFO', '用戶登錄', '賬號:test', '狀態(tài):成功']

7. 正則核心符號進階詳解

除基礎(chǔ)符號,進階必學(xué)符號,直接應(yīng)對復(fù)雜場景:

表格

符號含義
\u4e00-\u9fa5匹配所有中文
?0 次或 1 次,非貪婪核心
{n,m}匹配 n~m 次(如\d{6,12}
()分組,用于提取局部內(nèi)容、反向引用
[^...]匹配非括號內(nèi)的字符
.*?非貪婪匹配(最短匹配)
.*貪婪匹配(最長匹配)

重點:貪婪 vs 非貪婪匹配

html = "<div>標(biāo)題1</div><div>標(biāo)題2</div>"
# 貪婪匹配:匹配到最后一個</div>
res1 = re.findall(r"<div>.*</div>", html)
# 非貪婪匹配:逐個匹配
res2 = re.findall(r"<div>.*?</div>", html)
print(res1, res2)

正則中加?就是非貪婪,提取多組內(nèi)容必用!

8. 五大方法場景選型總結(jié)

表格

方法適用場景
re.match完整字符串格式校驗(身份證、賬號)
re.search全文找第一個匹配項
re.findall批量提取所有匹配內(nèi)容(最常用)
re.sub文本替換、脫敏、清洗
re.split多分隔符分割臟文本

9. 完整實戰(zhàn):日志文本清洗

綜合所有用法,解析一段真實日志,提取時間、級別、內(nèi)容:

log_text = """
2026-05-23 10:20:30 INFO: 用戶test登錄成功
2026-05-23 10:21:10 ERROR: 接口請求超時
2026-05-23 10:22:00 WARN: 內(nèi)存占用過高
"""
# 提取時間、日志級別、內(nèi)容
pattern = r"(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\s(\w+):\s(.+)"
result = re.findall(pattern, log_text)
for item in result:
    print(f"時間:{item[0]},級別:{item[1]},內(nèi)容:{item[2]}")

小結(jié)

本文從 Python 正則進階用法出發(fā),覆蓋格式校驗、批量提取、脫敏替換、臟數(shù)據(jù)分割、貪婪匹配、日志解析等實戰(zhàn)場景。 核心要點:

  1. 正則優(yōu)先使用原始字符串 r"";
  2. 批量提取用 findall,校驗用 match,替換用 sub
  3. 多組內(nèi)容提取必須用非貪婪匹配 .*?;
  4. 分組 () 可精準(zhǔn)提取局部信息。

正則是文本處理的萬能工具,掌握基礎(chǔ)符號 + 5 個核心方法,就能搞定 80% 的日常文本需求。

以上就是Python使用正則表達式實現(xiàn)從文本清洗到復(fù)雜信息提取的實戰(zhàn)指南的詳細內(nèi)容,更多關(guān)于Python正則表達式實戰(zhàn)指南的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

抚顺市| 于都县| 林甸县| 新田县| 上犹县| 怀来县| 定襄县| 博白县| 桃园县| 嘉祥县| 浮山县| 巴林左旗| 陆河县| 图木舒克市| 毕节市| 手游| 大石桥市| 颍上县| 莲花县| 永丰县| 成安县| 葵青区| 高州市| 华坪县| 扎鲁特旗| 佛坪县| 南漳县| 盘锦市| 邛崃市| 商河县| 乡城县| 突泉县| 温宿县| 七台河市| 鹤峰县| 徐汇区| 朝阳县| 确山县| 宜阳县| 和政县| 永靖县|