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

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

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

引言

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

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

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

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

import re

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

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

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

實(shí)戰(zhàn):校驗(yàn) 18 位身份證號(hào)

身份證規(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ù)匹配月、日、順序碼 + 校驗(yàn)位

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

3. re.search:全文查找首個(gè)匹配項(xiàng)

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

實(shí)戰(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é)議符號(hào)
  • \w+\.\w+:匹配域名主體 + 后綴

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

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

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

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

輸出:

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

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

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

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

5. re.sub:高級(jí)文本替換與脫敏

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

實(shí)戰(zhàn) 1:手機(jī)號(hào)脫敏

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)替換中間位。

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

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

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

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

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

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

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

輸出:

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

7. 正則核心符號(hào)進(jìn)階詳解

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

表格

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

重點(diǎn):貪婪 vs 非貪婪匹配

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

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

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

表格

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

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

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

log_text = """
2026-05-23 10:20:30 INFO: 用戶test登錄成功
2026-05-23 10:21:10 ERROR: 接口請求超時(shí)
2026-05-23 10:22:00 WARN: 內(nèi)存占用過高
"""
# 提取時(shí)間、日志級(jí)別、內(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"時(shí)間:{item[0]},級(jí)別:{item[1]},內(nèi)容:{item[2]}")

小結(jié)

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

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

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

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

相關(guān)文章

最新評論

虎林市| 仲巴县| 随州市| 博野县| 绥芬河市| 金寨县| 建德市| 武宁县| 泾阳县| 广河县| 西林县| 崇仁县| 江都市| 神池县| 乐亭县| 定兴县| 左贡县| 仙游县| 石屏县| 安福县| 会泽县| 延寿县| 博白县| 海阳市| 南郑县| 马公市| 万盛区| 东阿县| 慈利县| 凌云县| 龙岩市| 满洲里市| 田阳县| 连平县| 华容县| 延边| 黄骅市| 新巴尔虎右旗| 淳安县| 五指山市| 东安县|