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

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

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

前言

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

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

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

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

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

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

使用形式:

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

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

實例代碼:

import re

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

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

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

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

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

  • 作用:在整個字符串中查找第一個匹配項
  • 返回值:首個匹配的 Match 對象,或 None

使用形式:

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

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

示例代碼:

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

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

只返回第一個匹配成功的信息。

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

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

使用形式:

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

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

import re

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

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

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

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

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

用方括號定義可接受的字符集合

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

示例:

import re

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

運行結(jié)果:

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

符號含義示例
*0 次或多次ab* → "a", "ab", "abb"
+1 次或多次\d+ → 至少一個數(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)

運行結(jié)果:

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

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

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

import re

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

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

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

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

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

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

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

四、 “或” 和 分組(Grouping)

邏輯“或”:|

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

分組:(...)與捕獲

用括號將模式分組,便于提取子內(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)容

  • 作用:將匹配到的文本替換為指定字符串。
  • 語法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)同一正則需多次使用(如處理百萬行數(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 = "用戶ID:10086,訂單號:ORD20260122001,支付金額:99.9元;用戶ID:10087,訂單號:ORD20260122002,支付金額:199.5元;用戶ID:10088,訂單號:ORD20260122003,支付金額:0.88元"

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

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

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

實現(xiàn)代碼:

import re

log_info = "用戶ID:10086,訂單號:ORD20260122001,支付金額:99.9元;用戶ID:10087,訂單號:ORD20260122002,支付金額:199.5元;用戶ID:10088,訂單號: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é)語

記住口訣

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

總結(jié) 

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

相關(guān)文章

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

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

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

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

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

    基于pytorch實現(xiàn)運動鞋品牌識別功能

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

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

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

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

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

    python如何在word中存儲本地圖片

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

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

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

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

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

    python給list排序的簡單方法

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

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

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

最新評論

五家渠市| 富蕴县| 杭州市| 石阡县| 扎赉特旗| 岚皋县| 房产| 商城县| 阳山县| 双流县| 千阳县| 江口县| 尼木县| 稻城县| 湘乡市| 菏泽市| 辽源市| 怀柔区| 阿勒泰市| 林甸县| 潞城市| 潞西市| 雅安市| 江陵县| 梨树县| 宜兰县| 兴义市| 祁门县| 丹巴县| 新昌县| 九江市| 双流县| 泾源县| 五家渠市| 东山县| 荆门市| 城市| 普陀区| 山东省| 普安县| 阿勒泰市|