Python-正則表達式

目錄

一、打開正則表達式

?二、正則表達式的使用

1、限定符

(1)x*:*表示它前面的字符y 可以有0個或多個;

?(2)x+:表示它前面的字符可以出現一次以上;(+只可以匹配多次)

(3)x{}:精確指定一個字符x出現了多少次;

(4)x{2,5}:指定字符出現次數的范圍,x{2,} :字符x出現2次以上;

(5)x?:字符x出現0次或1次;

2、運算符

(1)(x|y):匹配字符x或y。(xy)|(ab):匹配 xy 或ab;

3、字符類

4、元字符

5、貪婪匹配和懶惰匹配

三、正則表達式實際應用-Python實現

1、re.finadll 用法

2、re.search 用法

3、.group 用法

4、re.finditer 用法

5、re.match 和?re.fullmatch?用法

6、re.sub 和 re.subn 用法

7、re.split 用法

8、re.compile 用法

9、正則表達式實際運用

(1)匹配手機號

(2)將字符串轉成字典格式


一、打開正則表達式

1、快捷鍵 Ctrl+R,將替換功能調出來且圖中紅框的位置一定要點亮,才可以使用正則表達式;

?二、正則表達式的使用

1、限定符

(1)x*:*表示它前面的字符y 可以有0個或多個;

?(2)x+:表示它前面的字符可以出現一次以上;(+只可以匹配多次)

(3x{}:精確指定一個字符x出現了多少次;

(4)x{2,5}:指定字符出現次數的范圍,x{2,} :字符x出現2次以上;

(5)x?:字符x出現0次或1次;

2、運算符

(1)(x|y):匹配字符x或y。(xy)|(ab):匹配 xy 或ab;

3、字符類

[abc]+:表示匹配的字符只能取自abc

[a-z]表示所有的小寫字母

[a-zA-Z]表示所有的英文字母

[a-zA-Z0-9]表示所有的英文字母和數字

[^a-zA-Z0-9]表示匹配除了尖號后面列出的所有字符之外的符號

4、元字符

正則里面的元字符基本上是以反斜杠開頭的;

5、貪婪匹配和懶惰匹配

<.+>:貪婪匹配任意字符,不包括換行符

<.+?>:懶惰匹配任意字符

三、正則表達式實際應用-Python實現

注:需要用到 re 模塊

1、re.finadll 用法

re.findall('.+', 'abc\ndef\nghi\n')  # 第一個參數是正則表達式,第二個參數是需要匹配的字符串
運行結果:['abc', 'def', 'ghi']
print(re.findall('.+', 'abc\ndef\nghi\n',flags=re.DOTALL))  # flags=re.DOTALL表示匹配所有的字符
運行結果:['abc\ndef\nghi\n']

查閱官方資料:

1)瀏覽器搜索 Python re flags;

2)找到官網并點擊;


2、re.search 用法

# 用法與findall一樣,唯一不同的是返回值;它只會匹配符合規則的第一個值,且返回的是一個Match對象。如果匹配不到,則返回NOne;

print(re.search('\d{3,4}', 'Tel-028-7654321'))
print(re.search('[a-z]{4,5}', 'Tel-028-7654321'))

運行結果:

<re.Match object; span=(4, 7), match='028'>
None

3、.group 用法

res = re.search('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321')print(res.group())
print(res.group(1))
print(res.group(2))

運行結果:

028-7654321
028
7654321

4、re.finditer 用法

功能:匹配所有符合規則的內容,并處理成迭代器返回;

res = re.finditer('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321 Tel-059-0123467')
print(res)
for m in res:print(m.group())# print(m.group(1))# print(m.group(2)) 

運行結果:

<callable_iterator object at 0x0000021E7D812E60>

(1)group無參數:
028-7654321
059-0123467

(2)group參數為1:

028
059

(3)group參數為2:

7654321
0123467


?補充:

# 迭代器,不依賴于索引的迭代取值方式

迭代就是重復,每一次的重復都是在上一次的基礎上

?詳細請讀python-迭代器


5、re.match 和?re.fullmatch?用法

re.match與re.seach用法一樣,也是只匹配符合規則的第一個值,并返回Match對象。

但它只能匹配字符串的開頭,若匹配不到返回None;

re.fullmatch ,從頭匹配到尾,也就是進行匹配整個字符串,若成功返回Match對象,否則返回None;

6、re.sub 和 re.subn 用法

re.sub功能:將匹配到的內容替換成其他內容;可以穿字符串,函數地址

(1)傳字符串

res = re.finditer('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321 Tel-059-0123467')
for m in res:print(m.group())
print(re.sub('(\d{3,4})-(\d{7,8})', '***', 'Tel-028-7654321 Tel-059-0123467'))y

運行結果:

028-7654321
059-0123467
Tel-*** Tel-***

(2)傳內存地址 - sub功能每匹配到一個值,就會得到一個Match對象,然后調用我們傳的函數,并把Match對象傳給他。

脫敏后的電話號碼---運于外賣上

def des(m):  # 這里是為了sub調用函數,傳對象給函數,這里m接收Match對象print(f'group(1):',m.group(1))tel = m.group(2)print(f'group(2):',tel)return tel[:2] + '***' + tel[-2:]  # tel[:2]得到tel的前兩位,tel[-2:]得到后兩位print(re.sub('(\d{3,4})-(\d{7,8})', des, 'Tel-028-7654321 Tel-059-0123467'))

運行結果:

group(1): 028
group(2): 7654321
group(1): 059
group(2): 0123467
Tel-76***21 Tel-01***67

re.subn功能與re.sub一樣,多返回了一個替換的次數

上面的例子

def des(m):tel = m.group(2)return tel[:2] + '***' + tel[-2:]print(re.subn('(\d{3,4})-(\d{7,8})', des, 'Tel-028-7654321 Tel-059-0123467'))

運行結果;

('Tel-76***21 Tel-01***67', 2)

7、re.split 用法

作用:把正則匹配到的內容作為分隔符進行拆分

s = 'xyg,- time,  !dog,  cat'
# 傳統的拆分
print(f'傳統拆分:', s.split(','))print(re.split('\w', s))  # \w 匹配單詞字符(包括字母、數字和下劃線)
print(re.split('\W', s))  # \W 匹配非單詞字符
print(re.split('\W+', s))  # \W+  加上+ 表示只匹配的字符只能取自W

運行結果:

傳統拆分: ['xyg', '- time', ' ?!dog', ' ?cat']
['', '', '', ',- ', '', '', '', ', ?!', '', '', ', ?', '', '', '']
['xyg', '', '', 'time', '', '', '', 'dog', '', '', 'cat']
['xyg', 'time', 'dog', 'cat']

8、re.compile 用法

功能:傳給它一個正則表達式,它會返回一個正則表達式對象;主要用于一個正則表達式被多次使用時。

res = re.compile('.*')
print(res.findall('Tel-028-7654321 Tel-059-0123467'))

運行結果:

['Tel-028-7654321 Tel-059-0123467', '']

9、正則表達式實際運用

(1)匹配手機號

phone_num = '''
125163251489
15812569487
15536854456
15587452256
15520361197
ab153023697
141111111111
12348567954
136489651035
13845620147
163258953255551'''print(re.findall(r'\b(13[0-9]|14[5-9]|15[0-35-9])\d{8}\b', phone_num))
print(re.findall(r'\b(?:13[0-9]|14[5-9]|15[0-35-9])\d{8}\b', phone_num))# 加r:防止轉義# \b 標注字符的邊界
# \d 匹配數字字符
# x{y} x字符出現y次
# x{a,b} 指定字符出現次數的范圍

# 在編程語言中使用正則,如果正則表達式中出現小括號,那編程語言會把小括號視作匹配邊界;也就是說會把小括號里面的內容視為一個group
# 解決方法:在小括號內的最前面加上?:,這樣可以申明這個小括號不是一個group

運行結果:

['158', '155', '155', '155', '138']
['15812569487', '15536854456', '15587452256', '15520361197', '13845620147']

(2)將字符串轉成字典格式

思想:

第一組:group(1)

第二組:group(2)

s = '''
Host: movie.douban.com
Pragma: no-cache
Referer: https://cn.bing.com/
'''
dic = {}
res = re.finditer('(.*): (.*)', s)
# .*:*表示它前面字符.可以有0個或多個
# : 冒號后面加空格,會因為字符串s中,冒號后面有空格for m in res:  # res寫了兩個小括號,就是兩組小括號# print(m.group(1))# print(m.group(2))dic[m.group(1)] = m.group(2)  # 填充到字典中print(dic)

運行結果:

{'Host': 'movie.douban.com', 'Pragma': 'no-cache', 'Referer': 'https://cn.bing.com/'}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36915.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電鍍用開關電源技術詳解

1 引言 在電鍍行業里&#xff0c;一般要求工作電源的輸出電壓較低&#xff0c;而電流很大。電源的功率要求也比較高&#xff0c;一般都是幾千瓦到幾十千瓦。目前&#xff0c;如此大功率的電鍍電源一般都采用晶閘管相控整流方式。其缺點是體積大、效率低、噪音高、功率因數低、…

[CocosCreator]CocosCreator網絡通信:https + websocket + protobuf

環境 cocos creator版本&#xff1a;3.8.0 開發語言&#xff1a;ts 操作系統&#xff1a;windows http部分 直接使用 XMLHttpRequest 創建http請求 // _getHttpUrl 方法自己寫字符串拼接public httpPostJsonRequest(uri: string, headData: any, data: any, cb: Function…

2024年6月大眾點評深圳餐飲店鋪POI分析18萬家

2024年6月大眾點評深圳餐飲店鋪POI共有178720家 店鋪POI點位示例&#xff1a; 店鋪id G9TSD2JvdLtA7fdm 店鋪名稱 江味龍蝦館(南山店) 十分制服務評分 8.8 十分制環境評分 8.8 十分制劃算評分 8.6 人均價格 128 評價數量 12840 店鋪地址 南山大道與桂廟路交叉口西北角…

微信小程序 點擊左上角返回彈窗提示

業務需求&#xff1a;當頁面表單沒有提交直接返回時&#xff0c;要提示用戶是否保存當前信息&#xff0c;如果已經提交就不提示了。 由于微信小程序是無法監聽右上角按鈕返回事件。 所以就換個思路 小程序提供了如下兩個Api wx.enableAlertBeforeUnload(Object object)&…

Python入門-基礎知識-編程規范

1.縮進 在編程語言中&#xff0c;代碼之間往往存在著一定的邏輯關系和層次關系。C語言和Java語言等 用“{}”分隔代碼塊&#xff0c;而Python用的是縮進和冒號。Python代碼的縮進可以使用空格鍵或 Tab鍵來實現&#xff0c;通常情況下以4個空格或1個制表符作為1個縮進量。Pytho…

TCP協議中的三次握手和四次揮手機制

TCP協議中的三次握手和四次揮手機制 TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的通信協議&#xff0c;它的三次握手和四次揮手機制是建立和斷開連接的關鍵步驟。 三次握手&#xff1a; 第一次…

等保測評與網絡安全法規的關聯:構建信息安全的法律與技術雙重保障

在信息化高速發展的今天&#xff0c;網絡安全已經成為國家安全、社會穩定和經濟發展的重要基石。為了保障網絡空間的安全和穩定&#xff0c;我國制定了一系列網絡安全法規&#xff0c;其中最為關鍵的就是《中華人民共和國網絡安全法》。與此同時&#xff0c;等保測評&#xff0…

第 2 章SwiftUI 入門及文本操作

如果你之前使用過 UIKit,你會發現TextSwiftUI 中的控件與 UIKit 中的非常相似UILabel。它是一個允許你顯示一行或多行文本的視圖。此Text控件不可編輯,但可用于在屏幕上顯示只讀信息。例如,如果你想顯示一條屏幕消息,你可以使用它Text來實現它。 在本章中,我們將向您展示…

RAG開發中常見的12個痛點及解決方案

受到 Barnett 等人論文《構建檢索增強生成系統的七大挑戰》啟發&#xff0c;本文將探討論文中提及的七大挑戰及在開發 RAG&#xff08;檢索增強生成&#xff09;流程中常遇到的五個額外難題。更為重要的是&#xff0c;我們將深入討論解決這些 RAG 難題的策略&#xff0c;以便我…

使用 WebGL 創建 3D 對象

WebGL Demohttps://mdn.github.io/dom-examples/webgl-examples/tutorial/sample5/index.html 現在讓我們給之前的正方形添加五個面從而可以創建一個三維的立方體。最簡單的方式就是通過調用方法 gl.drawElements() 使用頂點數組列表來替換之前的通過方法gl.drawArrays() 直接…

TinTin Web3 動態精選:Aptos Builder Jam 亞洲首站即將開啟,Solana 實現全網連接

TinTin 快訊由 TinTinLand 開發者技術社區打造&#xff0c;旨在為開發者提供最新的 Web3 新聞、市場時訊和技術更新。TinTin 快訊將以周為單位&#xff0c; 匯集當周內的行業熱點并以快訊的形式排列成文。掌握一手的技術資訊和市場動態&#xff0c;將有助于 TinTinLand 社區的開…

檢測SD NAND文件系統異常和修復的方法

目錄 1、打開命令提示符&#xff1a; 2、運行chkdsk命令&#xff1a; 3、命令參數說明&#xff1a; chkdsk是Windows中的一個命令行工具&#xff0c;用于檢查磁盤上的文件系統錯誤和修復壞塊。MK米客方德為您提供指導&#xff0c;以下是使用chkdsk的步驟&#xff1a; 1、打開…

綜合IT運維管理解決方案

綜合IT運維管理解決方案 在信息化和數字化高速發展的時代&#xff0c;企業的IT運維管理已經成為保障業務連續性和提升運營效率的關鍵環節。高效的IT運維管理不僅能夠降低運維成本&#xff0c;還能提升服務質量和用戶滿意度。本文將詳細介紹綜合IT運維管理解決方案&#xff0c;…

富格林:正規平臺曝光出金招數

富格林悉知&#xff0c;在現貨黃金中&#xff0c;正規盈利出金是要建立在無落入誘導風險的情況下實現的&#xff0c;投資者要關注的不僅僅是如何進行盈利&#xff0c;還要掌握正規平臺曝光的交易技巧或經驗。對于新手投資者來說&#xff0c;學習投資的基礎知識&#xff0c;提升…

eBPF技術揭秘:DeepFlow如何引領故障排查,提升運維效率

DeepFlow 實戰&#xff1a;eBPF 技術如何提升故障排查效率 目錄 DeepFlow 實戰&#xff1a;eBPF 技術如何提升故障排查效率 微服務架構系統中各個服務、組件及其相互關系的全景 零侵擾分布式追蹤&#xff08;Distributed Tracing&#xff09;的架構和工作流程 關于零侵擾持…

華為od 2024 | 什么是華為od,od 薪資待遇,od機試題清單

目錄 專欄導讀華為OD機試算法題太多了&#xff0c;知識點繁雜&#xff0c;如何刷題更有效率呢&#xff1f; 一、邏輯分析二、數據結構1、線性表① 數組② 雙指針 2、map與list3、隊列4、鏈表5、棧6、滑動窗口7、二叉樹8、并查集9、矩陣 三、算法1、基礎算法① 貪心思維② 二分查…

后端系統的安全性

后端系統的安全性 后端系統的安全性是任何Web應用或服務的核心組成部分&#xff0c;它涉及保護數據、用戶隱私以及系統免受惡意攻擊。以下是后端安全的一些關鍵點&#xff1a; 認證和授權&#xff1a;確保只有經過身份驗證的用戶才能訪問特定資源。這通常包括使用用戶名/密碼…

Spring Session將HttpSession保存到Redis中,實現重啟應用會話不丟失

這篇文章介紹一下在springboot項目中整合Spring Session&#xff0c;將session會話信息保存到Redis中&#xff0c;防止重啟應用導致會話丟失。 第一步 創建一個springboot項目&#xff0c;添加spring-session-redis的依賴&#xff0c;因為要用到reids&#xff0c;所以要把redi…

擴散模型中的UNET

目錄 一、為什么UNET模型可以用于去噪網絡二、擴散模型中的UNET是一個條件去噪網絡&#xff0c;怎么實現的三、UNET用于分割和用去去噪的區別 一、為什么UNET模型可以用于去噪網絡 下采樣部分: 能夠提取圖像的深層次特征&#xff0c;這些特征往往包含圖像的重要結構和信息&…

Python 繼承:理解與應用

Python中的繼承是面向對象編程中重要的概念之一&#xff0c;允許一個類&#xff08;子類&#xff09;從另一個類&#xff08;父類&#xff09;繼承屬性和方法。這種機制不僅能提高代碼的重用性&#xff0c;還有助于構建層次化的數據模型&#xff0c;簡化復雜系統的設計與維護。…