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

Python數(shù)據(jù)分析中正則表達(dá)式匹配字符串與常用函數(shù)示例詳解

 更新時(shí)間:2026年05月06日 11:00:41   作者:流?  
正則表達(dá)式是處理文本數(shù)據(jù)的強(qiáng)大工具,Python通過(guò)re模塊提供了完整的正則表達(dá)式功能,這篇文章主要介紹了Python數(shù)據(jù)分析中正則表達(dá)式匹配字符串與常用函數(shù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在真實(shí)的數(shù)據(jù)分析項(xiàng)目中,原始數(shù)據(jù)往往“臟亂差”——包含大量非結(jié)構(gòu)化文本,如用戶(hù)評(píng)論、日志、網(wǎng)頁(yè)抓取內(nèi)容等。如何從中精準(zhǔn)提取電話(huà)號(hào)碼、郵箱、日期、金額等關(guān)鍵信息?答案就是:正則表達(dá)式(Regular Expression)。

Python 通過(guò)標(biāo)準(zhǔn)庫(kù) re 提供了強(qiáng)大而靈活的正則支持。本文將系統(tǒng)講解正則在數(shù)據(jù)分析中的核心用法,涵蓋:

  • 字符串匹配函數(shù)(match、search、findall)
  • 正則語(yǔ)法(字符范圍、重復(fù)次數(shù)、字符類(lèi))
  • 貪婪與非貪婪模式
  • 分組與邏輯“或”
  • 替換與編譯優(yōu)化(sub、compile)

一、匹配字符串:三大核心函數(shù)

1.re.match():從字符串開(kāi)頭匹配

  • 作用:僅檢查字符串起始位置是否匹配正則模式。
  • 返回值:匹配成功返回 Match 對(duì)象,否則 None

使用形式:

re.match(參數(shù)1,參數(shù)2)

功能:表示從參數(shù)2(字符串類(lèi)型數(shù)據(jù))中查找滿(mǎn)足參數(shù)1(正則表達(dá)式)的內(nèi)容。

實(shí)例代碼:

import re

messaga = '張三、李四、王五、趙六、張三'
result = re.match('張三', messaga)
print(result)

result1 = re.match('李四', messaga)
print(result1)

代碼執(zhí)行結(jié)果:

  • span=(0,2)表示字符串索引號(hào)為0~2的位置匹配成功。
  • match='張三'表示匹配的內(nèi)容為張三。

2.re.search():全文搜索首次匹配

  • 作用:在整個(gè)字符串中查找第一個(gè)匹配項(xiàng)。
  • 返回值:首個(gè)匹配的 Match 對(duì)象,或 None。

使用形式:

re.search(參數(shù)1,參數(shù)2)

功能:表示從參數(shù)2(字符串類(lèi)型數(shù)據(jù))中查找滿(mǎn)足參數(shù)1(正則表達(dá)式)的內(nèi)容,如果匹配了多個(gè)參數(shù)1,則只返回第一個(gè)匹配成功的信息。

示例代碼:

messaga1 = '張三、李四、王五、趙六、王五'
result2 = re.search('王五', messaga1)
print(result2)

代碼執(zhí)行結(jié)果:

只返回第一個(gè)匹配成功的信息。

3.re.findall():查找所有匹配項(xiàng)

  • 作用:返回所有非重疊匹配結(jié)果的列表。
  • 返回值:字符串列表(若無(wú)分組);元組列表(若有多個(gè)分組)。

使用形式:

re.findall(參數(shù)1,參數(shù)2)

功能:表示從參數(shù)2(字符串類(lèi)型數(shù)據(jù))中查找滿(mǎn)足參數(shù)1(正則表達(dá)式)的內(nèi)容,如果匹配了多個(gè)參數(shù)1,則返回匹配成功的全部信息。

import re

messaga1 = '張三、李四、王五、趙六、王五'
result3 = re.findall('王五', messaga1)
print(result3)

運(yùn)行結(jié)果:
['王五','王五']

findall()并不返回匹配的位置,只返回匹配的全部?jī)?nèi)容。

二、正則表達(dá)式基礎(chǔ)語(yǔ)法

表示字符范圍:[...]

用方括號(hào)定義可接受的字符集合

表達(dá)式含義
[abc]匹配 a、b 或 c
[a-z]匹配任意小寫(xiě)字母
[0-9]等價(jià)于 \d,匹配數(shù)字
[^0-9]取反,匹配非數(shù)字字符

示例:

import re

message = 'Pythonnnnncc93,c87,Javac63,C++88'
result_1 = re.search('[cn]', message)  # 只返回第一個(gè)匹配成功的信息
result_2 = re.findall('[0-9]', message)
result_3 = re.findall('[cn]*[0-9]', message)
print(result_1)
print(result_2)
print(result_3)

運(yùn)行結(jié)果:

表示字符出現(xiàn)的次數(shù)(量詞)

符號(hào)含義示例
*0 次或多次ab* → "a", "ab", "abb"
+1 次或多次\d+ → 至少一個(gè)數(shù)字
?0 次或 1 次colou?r → "color" / "colour"
{n}恰好 n 次\d{4} → 四位年份
{n,}至少 n 次\d{3,} → 三位及以上數(shù)字
{n,m}n 到 m 次\d{2,4} → 2~4 位數(shù)字

示例:

import re

message1 = 'da2a7ddbre77yifed777t3fefd777b'
result = re.findall('[a-z]*[0-9][a-z]', message1)
print(result)

運(yùn)行結(jié)果:

表示同一類(lèi)字符(預(yù)定義字符類(lèi))

符號(hào)等價(jià)寫(xiě)法含義
\d[0-9]數(shù)字
\D[^0-9]非數(shù)字
\w[a-zA-Z0-9_]單詞字符(字母、數(shù)字、下劃線(xiàn))
\W[^a-zA-Z0-9_]非單詞字符
\s[ \t\n\r\f\v]空白字符
\S[^\t\n\r\f\v]非空白字符
\b單詞邊界,即單詞中與空格鄰接的字符
\B非單詞邊界
\f分頁(yè)符
\n換行符
\r回車(chē)符
\t制表符
\v垂直制表符
.:匹配除"\n"和"\r"之外的任何單個(gè)字符

示例:清洗文本中的非字母數(shù)字字符

import re

text = "Hello, World! 123 @#$"
clean = re.sub(r"\W", " ", text)  # \W = 非單詞字符
print(clean)  # "Hello  World  123   "

三、貪婪模式 vs 非貪婪模式

貪婪和非貪婪模式指是否匹配更多內(nèi)容,具體使用如下:

  • 默認(rèn)是貪婪模式:盡可能多地匹配字符。
  • 非貪婪(惰性)模式:在量詞后加 ?,盡可能少匹配。
text = "<div>Hello</div><div>World</div>"

# 貪婪:匹配整個(gè)字符串
print(re.search(r"<div>.*</div>", text).group())
# 輸出:<div>Hello</div><div>World</div>

# 非貪婪:只匹配第一個(gè)標(biāo)簽
print(re.search(r"<div>.*?</div>", text).group())
# 輸出:<div>Hello</div>

數(shù)據(jù)分析提示:提取 HTML/XML 標(biāo)簽、JSON 片段時(shí),務(wù)必使用非貪婪模式!

四、 “或” 和 分組(Grouping)

邏輯“或”:|

re.findall(r"jpg|png|gif", "image1.jpg, image2.png, icon.gif")
# 輸出:['jpg', 'png', 'gif']

分組:(...)與捕獲

用括號(hào)將模式分組,便于提取子內(nèi)容:

date_str = "2025-04-05"
match = re.search(r"(\d{4})-(\d{2})-(\d{2})", date_str)
print(match.groups())      # ('2025', '04', '05')
print(match.group(1))      # '2025'(年)

五、sub()和compile()方法

re.sub():替換匹配內(nèi)容

  • 作用:將匹配到的文本替換為指定字符串。
  • 語(yǔ)法re.sub(pattern, repl, string)
import re

text = "Call me at 138****5678"
cleaned = re.sub(r"\d{3}\*\*\*\d{4}", "[PHONE_HIDDEN]", text)
print(cleaned)  # Call me at [PHONE_HIDDEN]

支持使用分組引用(\1\2):

import re

text = "John Doe"
swapped = re.sub(r"(\w+) (\w+)", r"\2, \1", text)
print(swapped)  # Doe, John

re.compile():預(yù)編譯正則(提升性能)

當(dāng)同一正則需多次使用(如處理百萬(wàn)行數(shù)據(jù)),應(yīng)先編譯:

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

# 后續(xù)可直接調(diào)用
if phone_pattern.search(text1):
    ...
if phone_pattern.findall(text2):
    ...

綜合案例:

給定字符串 log_info = "用戶(hù)ID:10086,訂單號(hào):ORD20260122001,支付金額:99.9元;用戶(hù)ID:10087,訂單號(hào):ORD20260122002,支付金額:199.5元;用戶(hù)ID:10088,訂單號(hào):ORD20260122003,支付金額:0.88元"

1、基礎(chǔ)匹配:提取所有的用戶(hù) ID 數(shù)字(如 10086、10087、10088),并以列表形式輸出。

2、捕獲組 + 貪婪 / 非貪婪:提取所有的訂單號(hào)(如 ORD20260122001),要求分別用貪婪匹配和非貪婪匹配實(shí)現(xiàn),并對(duì)比兩種方式的結(jié)果(思考為什么結(jié)果一致 / 不一致)。

3、數(shù)值提?。禾崛∷械闹Ц督痤~數(shù)字(僅保留數(shù)字部分,如 99.9、199.5、0.88),忽略 “元” 字,最終輸出浮點(diǎn)數(shù)列表。

實(shí)現(xiàn)代碼:

import re

log_info = "用戶(hù)ID:10086,訂單號(hào):ORD20260122001,支付金額:99.9元;用戶(hù)ID:10087,訂單號(hào):ORD20260122002,支付金額:199.5元;用戶(hù)ID:10088,訂單號(hào):ORD20260122003,支付金額:0.88元"

pattern1 = re.compile(':(\d+),')
print(pattern1.findall(log_info))

pattern2 = re.compile('ORD\d+')  # 貪婪模式
print(pattern2.findall(log_info))

pattern3 = re.compile('ORD2026012200\d+?')  # 非貪婪模式
print(pattern3.findall(log_info))

pattern4 = re.compile(':(\d+.\d+)元')
print(pattern4.findall(log_info))

結(jié)語(yǔ)

記住口訣

  • 提取一個(gè)用 search,
  • 提取多個(gè)用 findall,
  • 替換內(nèi)容用 sub,
  • 高頻使用要 compile

總結(jié) 

到此這篇關(guān)于Python數(shù)據(jù)分析中正則表達(dá)式匹配字符串與常用函數(shù)的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)分析正則表達(dá)式匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python?如何獲取文件夾中的全部文件

    python?如何獲取文件夾中的全部文件

    在神經(jīng)網(wǎng)絡(luò)準(zhǔn)備訓(xùn)練集的時(shí)候,經(jīng)常需要從文件夾中讀取全部圖片。經(jīng)常遇到的有兩種方式,一種是os.listdir()另一種是glob,本文結(jié)合示例代碼對(duì)python獲取文件夾中全部文件講解的非常詳細(xì),需要的朋友參考下吧
    2023-01-01
  • Pytorch中的數(shù)據(jù)轉(zhuǎn)換Transforms與DataLoader方式

    Pytorch中的數(shù)據(jù)轉(zhuǎn)換Transforms與DataLoader方式

    這篇文章主要介紹了Pytorch中的數(shù)據(jù)轉(zhuǎn)換Transforms與DataLoader方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能

    基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能

    這篇文章主要給大家介紹了關(guān)于如何基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyTorch具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2024-02-02
  • python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片

    python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python找出微信上刪除你好友的人腳本寫(xiě)法

    Python找出微信上刪除你好友的人腳本寫(xiě)法

    在本篇文章中我們給大家分享了Python找出微信上刪除你好友的人腳本寫(xiě)法以及相關(guān)實(shí)例代碼,有需要的朋友們參考下。
    2018-11-11
  • python如何在word中存儲(chǔ)本地圖片

    python如何在word中存儲(chǔ)本地圖片

    這篇文章主要介紹了python如何在word中存儲(chǔ)本地圖片,想了解docx模塊的同學(xué),可以參考下
    2021-04-04
  • python提取特定格式的數(shù)據(jù)的操作方法

    python提取特定格式的數(shù)據(jù)的操作方法

    這篇文章主要介紹了python提取特定格式的數(shù)據(jù),通過(guò)本腳本,我們學(xué)習(xí)了如何使用 Pandas 讀取和處理 Excel 數(shù)據(jù),如何使用 Tkinter 創(chuàng)建圖形用戶(hù)界面,以及如何處理文件對(duì)話(huà)框和文件操作,需要的朋友可以參考下
    2024-06-06
  • Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    在電腦上或多或少的存在一些重復(fù)文件,體積小的倒沒(méi)什么,如果體積大的就很占內(nèi)存了。本文用python制作了一個(gè)刪除重復(fù)文件的小工具,核心代碼很簡(jiǎn)單,希望對(duì)你有所幫助
    2022-07-07
  • python給list排序的簡(jiǎn)單方法

    python給list排序的簡(jiǎn)單方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python給list排序的簡(jiǎn)單方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python實(shí)現(xiàn)單詞拼寫(xiě)檢查

    Python實(shí)現(xiàn)單詞拼寫(xiě)檢查

    這篇文章主要介紹了Python實(shí)現(xiàn)單詞拼寫(xiě)檢查,本文講解了單詞拼寫(xiě)檢查的一些知識(shí)并給出兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

仁寿县| 株洲市| 和平县| 东乡县| 玛纳斯县| 西和县| 唐山市| 和顺县| 同仁县| 阿巴嘎旗| 无锡市| 新绛县| 扎囊县| 萨嘎县| 台中市| 正宁县| 林芝县| 峨眉山市| 临武县| 大城县| 康定县| 鄢陵县| 陵水| 曲靖市| 新兴县| 格尔木市| 鞍山市| 延津县| 平果县| 高台县| 修武县| 察雅县| 台中市| 龙海市| 双牌县| 汝城县| 社旗县| 九江市| 卢氏县| 张家口市| 丰台区|