Python高級(三)_正則表達式

Python高級-正則表達式

第三章 正則表達式

在開發中會有大量的字符串處理工作,其中經常會涉及到字符串格式的校驗。

1、正則表達式概述

正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),是計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。

2、re模塊

一個正則表達式(或RE)指定了一集與之匹配的字符串;模塊內的函數可以讓你檢查某個字符串是否跟給定的正則表達式匹配模塊定義了幾個函數,常量,和一個例外。有些函數是編譯后的正則表達式方法的簡化版本(少了一些特性)。絕大部分重要的應用,總是會先將正則表達式編譯,之后在進行操作

那現在我們先熟悉re模塊的一簡單的方法

compile方法
re.compile(pattern[,flags])
# 作用:把正則表達式語法轉化成正則表達式對象
pattern:正則表達式語法
flags定義匹配模式包括:{
re.I:忽略大小寫
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依賴于當前環境
re.M:多行模式
re.S:' . '并且包括換行符在內的任意字符(注意:' . '匹配任意字符但不包 括換行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依賴于 Unicode 字符屬性數據庫
}
search方法
re.search(pattern, string[, flags=0])
# 作用:掃描整個字符串,并返回第一個成功的匹配。如果匹配失敗,則返回None。
pattern : 正則表達式對象
string : 要被查找替換的原始字符串。
flags定義匹配模式包括:{
re.I:忽略大小寫
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依賴于當前環境
re.M:多行模式
re.S:' . '并且包括換行符在內的任意字符(注意:' . '匹配任意字符但不包括換行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依賴于 Unicode 字符屬性數據庫
}
match方法
re.match(pattern, string[, flags=0])
# 作用:從起始位置開始匹配,匹配成功返回一個對象,未匹配成功返回None
pattern : 正則表達式對象
string : 需要匹配的字符串
flags定義匹配模式包括:{
re.I:忽略大小寫
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依賴于當前環境
re.M:多行模式
re.S:' . '并且包括換行符在內的任意字符(注意:' . '匹配任意字符但不包括換行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依賴于 Unicode 字符屬性數據庫
}

這里我們分別簡單了解一下這些模塊,

1、compile方法是將正則表達式轉換成對象,

2、search和match方法是根據compile對象轉換生成好的規則,進行匹配。

那我們將上方的思考題拿下來,先看思考一下

# 導入模塊
>>> import re
# 如何判斷一個字符串是手機號呢
tel_1 = '''aesdf13811011234aa1a3hi233rhi387156340affa124564531346546afa19454132135'''
# 這里我們不說的過于復雜了,也不說特殊號碼了,簡單了解一下規則
# 1、由11位正整數字組成
# 2、第一位數字必須由1開頭,第二位數字由3-9組成
# 根據這些條件這里即可以生成一個匹配式 1[3,9]\d{9},下面我們會講解上匹配語法與規則
pattern = re.compile(r'1[3,9]\d{9}')
# 使用search方法,匹配到一個電話號碼
print(re.search(pattern, tel_1))#<re.Match object; span=(7, 18), match='13811011234'>
# 再使用match方法,輸出了None
print(re.match(pattern, tel_1))
None# -----------------------------------------------# 那我們換一個例子再看,
tel_2 = '''19454132135abuw'''
# 再將匹配表達式轉換成匹配對象
pattern = re.compile(r'1[3,9]\d{9}')
# 先使用search方法
print(re.search(pattern, tel_2))
#<re.Match object; span=(0, 11), match='19454132135'>
# 再使用match方法,看到對象響應的結果,出現了需要匹配的號碼
print(re.match(pattern, tel_2))
#<re.Match object; span=(0, 11), match='19454132135'>

我們可以發現,更多的時候,我們在字符串或者是一堆單詞內容里面不確定范圍搜索,可以使用search來進行匹配第一個最先匹配到的正常的電話號碼,而match用來匹配第一個注意是第一個字符的,這里的第一個是在被搜索的這串字符的第一位索引上的

這里面我們根據返回回來的內容,看到有三部分

1、re.Match object 對象
2、span=()搜索結果在文本索引位置
3、match匹配結果

這里我們現在就需要急切了解到兩個問題

第一、得到的匹配對象re.Match object該如何處理,以及re模塊是否存在一些其他的方法

第二、正則表達式的寫法

3、Match對象

我們來看一下,Match對象,Match對象是一次匹配的結果,包含匹配的很多信息

Match匹配對象的屬性
在這里插入圖片描述

>>> import re
>>> tel_1 = '''aesdf13811011234aa1a3hi233rhi387156340affa124564531346546afa19454132135'''
>>> pattern = re.compile(r'1[3,9]\d{9}')
>>> results = re.search(pattern, tel_1)
# pos表示搜索的開始的位置,endpos搜索結束的位置
>>> print(results.pos, results.endpos)
0 83
# group表示匹配的結果
>>> print(results.group())
13811011234
>>> tel_2 = '''19454132135abuw'''
>>> results = re.search(pattern, tel_2)
# pos表示搜索的開始的位置,endpos搜索結束的位置
>>> print(results.pos, results.endpos)
0 15
# group表示匹配的結果
>>> print(results.group())
19454132135>>> results = re.search(pattern, tel_2)
# pos表示搜索的開始的位置,endpos搜索結束的位置
>>> print(results.pos, results.endpos)
0 15
# group表示匹配的結果
>>> print(results.group())
19454132135

4、正則表達式

構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配元字符 (參見 python 模塊 [re 文檔](re — 正則表達式操作 — Python 3.12.4 文檔))

字符功能
.匹配任意字符(不包括換行符)
A匹配開始位置,多行模式下匹配每一行的開始,(也有取反的意思,區分應用場景)
$匹配結束位置,多行模式下匹配每一行的結束
*匹配前一個元字符0到多次
匹配前一個元字符1到多次
?匹配前一個元字符0到1次
{m,n}匹配前一個元字符m到n
\轉義字符,跟在其后的字符將失去作為特殊元字符的含義,
例如.只能匹配.,不能再匹配任意字符
[]字符集, 一個字符的集合,可匹配其中任意一個字符
|邏輯表達式或,比如a
(…)分組,默認為捕獲,即被分組的內容可以被單獨取出,

默認每個分組有個索引,從1開始,按照"("的順序決定索引值
(?iLmsux)分組中可以設置模式,iLmsux之中的每個字符代表一個模式
(?:…)分組的不捕獲模式,計算索引時會跳過這個分組
(?P…)分組的命名模式,取此分組中的內容時可以使用索引也可以使用name
(?P=name)分組的引用模式,可在同一個正則表達式用引用前面命名過的正則
(?#…)注釋,不影響正則表達式其它部分
(?=…)順序肯定環視,表示所在位置右側能夠匹配括號內正則
(?!..)順序否定環視,表示所在位置右側不能匹配括號內正則
(?<=…)逆序肯定環視,表示所在位置左側能夠匹配括號內正則
(?<!..)逆序否定環視,表示所在位置左側不能匹配括號內正則
(?(id/name)yes|no)若前面指定id或name的分區匹配成功則執行yes處的正則,否則執行no處的正則
\number匹配和前面索引為number的分組捕獲到的內容一樣的字符串
VA匹配字符串開始位置,忽略多行模式
\Z匹配字符串結束位置,忽略多行模式
\b匹配位于單詞開始或結束位置的空字符串
\B匹配不位于單詞開始或結束位置的空字符串
\d匹配一個數字,相當于[0-9]
\D匹配非數字,相當于[^0-9]
\s匹配任意空白字符,相當于[\t\n\r\fv]
\S匹配非空白字符,相當于[^\t\n\r\flv]
\w匹配數字、字母、下劃線中任意一個字符,相當于[a-zA-Z0-9]
\W匹配非數字、字母、下劃線中的任意字符,相當于-[^\w]

5、表示字符

在這里插入圖片描述

’ . ’ 用法
# 導入模塊
>>> import re
# 測試匹配任意字符(不包括換行符)使用的re中的match方法
>>> print(re.match(".","a").group())
'a'
>>> print(re.match(".","1").group())
'1'
>>> print(re.match(".","_").group())
'_'
>>> print(re.match(".","0").group())
'0'
# 只有匹配到'\n'時候提示None,說明,匹配任意字符(不包括換行符)
>>> print(re.match(".","\n"))
None
’ [ ] ’ 用法
# 導入模塊
>>> import re
# 匹配字符集,區間中的集合,可匹配其中任意一個字符,使用的re中的match方法
# 如果hello的首字符小寫,那么正則表達式需要小寫的h
>>> print(re.match("h","hello Python").group())
'h'
# 如果hello的首字符大寫,那么正則表達式需要大寫的H
>>> print(re.match("H","Hello Python").group())
'H'
# 大小寫h都可以的情況
>>> print(re.match("[hH]","hello Python").group())
'h'
>>> print(re.match("[hH]","Hello Python"

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

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

相關文章

PostgreSql中的JSON數據類型

PostgreSQL 提供了兩種 JSON 數據類型&#xff1a;JSON 以及 JSONB。這兩種類型主要的區別在于數據存儲格式&#xff0c;JSONB 使用二進制格式存儲數據&#xff0c;更易于處理。 PostgreSQL 推薦優先選擇 JSONB 數據類型。 兩種數據類型之間的區別&#xff1a; 功能JSONJSONB存…

網絡建設與運維23國賽網絡運維正式賽題解析

競賽環境請看主頁&#xff01; 23國賽網絡運維 任務描述&#xff1a;某集團公司在更新設備后&#xff0c;路由之間無法正常通信&#xff0c;請修 復網絡達到正常通信。 &#xff08;1&#xff09; 請在server1“管理員”下拉菜單中選擇“鏡像”選項卡&#xff0c;點 擊 “創…

超聲波眼鏡清洗機有用嗎?四大主流超聲波清洗機品牌整理測評

長期佩戴的眼鏡&#xff0c;若不定期清洗&#xff0c;不僅鏡片會逐漸積聚油脂、灰塵&#xff0c;影響透光率&#xff0c;使視物模糊&#xff0c;更嚴重的是&#xff0c;眼鏡上日益增加的微小雜質和細菌可能會逐漸影響到眼睛健康&#xff0c;導致視力下降、眼部疾病等問題。 這…

Go 1.19.4 函數-Day 08

1. 函數概念和調用原理 1.1 基本介紹 函數是基本的代碼塊&#xff0c;用于執行一個任務。 Go 語言最少有個 main() 函數。 你可以通過函數來劃分不同功能&#xff0c;邏輯上每個函數執行的是指定的任務。 函數聲明告訴了編譯器函數的名稱&#xff0c;返回類型&#xff0c;和參…

STM32 - PWR 筆記

PWR&#xff08;Power Control&#xff09;電源控制 PWR 負責管理 STM32 內部的電源供電部分&#xff0c;可以實現 可編程電壓監測器 和 低功耗模式 的功能 可編程電壓監測器&#xff08;PVD&#xff09;可以監控VDD電源電壓&#xff0c;當VDD下降到PVD閥值以下或上升到PVD…

usbserver工程師手記(三)手工開通 OTP功能

1、設定密鑰&#xff0c;用戶自行選擇一個密鑰&#xff0c;以下以密鑰為 EAZAYOKNGETBOPC5 為例說明 2、usb server 配置otp 密鑰&#xff0c;目前還沒有UI 界面開通&#xff0c;后續版本會支持從管理界面開通 curl -X POST -H Content-Type: application/json -H Accept: app…

關于transformers庫驗證時不進入compute_metrics方法的一些坑

生成式任務輸入就是標簽 transformers在進入compute_metrics前會有一個判斷&#xff0c;源碼如下&#xff1a; # 版本 transformers4.41.2 # 在trainer.py 的 3842 行 # Metrics! if (self.compute_metrics is not Noneand all_preds is not Noneand all_labels is not Nonea…

Centos7下zabbix安裝與部署

Centos7下zabbix安裝與部署 一、Zabbix介紹 1、zabbix是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案 2、zabbix能監視各種網絡參數&#xff0c;保證服務器系統的安全運營&#xff1b;并提供靈活的通知機制以讓系統管理員快速定位/解決存在的各…

活動策劃秘籍:如何讓企業活動引爆市場?

作為一個活動策劃&#xff0c;我的經驗是&#xff0c;活動策劃是一場精心編排的交響樂&#xff0c;每一個音符都要恰到好處。 想要做好企業活動策劃工作的關鍵在于綜合考慮多個方面&#xff0c;并確保每個環節的順暢執行。 以下是7個關鍵要素&#xff0c;只要用心體會&#x…

學習小記-使用Redis的令牌桶算法實現分布式限流

在介紹令牌桶算法前先介紹一下漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法是一種固定容量的容器模型&#xff0c;它通過控制數據流入和流出的速度來限制數據的傳輸速率。漏桶算法的主要特點包括&#xff1a; 固定…

鴻蒙開發:Universal Keystore Kit(密鑰管理服務)【密鑰派生(C/C++)】

密鑰派生(C/C) 以HKDF256密鑰為例&#xff0c;完成密鑰派生。具體的場景介紹及支持的算法規格&#xff0c;請參考[密鑰生成支持的算法]。 在CMake腳本中鏈接相關動態庫 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)開發步驟 生成密鑰 指定密鑰別名。 初始化密鑰屬…

通過電壓差判定無源晶振是否起振正確嗎?

在電子工程中&#xff0c;無源晶振作為許多數字電路的基礎組件&#xff0c;其是否成功起振對于系統的正常運行至關重要。然而&#xff0c;通過簡單檢測晶振兩端的電壓差來判斷晶振是否工作&#xff0c;這一方法存在一定的誤區&#xff0c;晶發電子將深入探討這一話題&#xff0…

2008年下半年軟件設計師【下午題】真題及答案

文章目錄 2008年下半年軟件設計師下午題--真題2008年下半年軟件設計師下午題--答案 2008年下半年軟件設計師下午題–真題 2008年下半年軟件設計師下午題–答案

四川赤橙宏海商務信息咨詢有限公司抖音電商服務靠譜嗎?

在數字化浪潮席卷全球的今天&#xff0c;電商行業蓬勃發展&#xff0c;各種新興電商平臺層出不窮。其中&#xff0c;抖音電商以其獨特的社交屬性和龐大的用戶基礎&#xff0c;迅速崛起為行業新星。四川赤橙宏海商務信息咨詢有限公司&#xff0c;作為專注于抖音電商服務的佼佼者…

個人怎么交易現貨黃金:加速形態

我們作為普通個人&#xff0c;在現貨黃金市場中交易就需要掌握相應的現貨黃金投資技巧。下面我們就來介紹一個&#xff0c;個人怎么交易現貨黃金的形態——加速形態。 加速形態是用于判斷市場趨勢力竭的情況&#xff0c;這種趨勢可以是上升&#xff0c;也可以是下跌。但是要注意…

用Qwt進行圖表和數據可視化開發

目錄 Qwt介紹 示例應用場景 典型QWT開發流程 舉一些Qwt的例子&#xff0c;多繪制幾種類型的圖像 1. 繪制折線圖 (Line Plot) 2. 繪制散點圖 (Scatter Plot) 3. 繪制柱狀圖 (Bar Plot) 4. 繪制直方圖 (Histogram) Qwt介紹 QWT開發主要涉及使用QWT庫進行圖表和數據可視化…

晉升業內新寵兒,MoE模型給了AI行業兩條關鍵出路

文 | 智能相對論 作者 | 陳泊丞 今年以來&#xff0c;MoE模型成了AI行業的新寵兒。 一方面&#xff0c;越來越多的廠商在自家的閉源模型上采用了MoE架構。在海外&#xff0c;OpenAI的GPT-4、谷歌的Gemini、Mistral AI的Mistral、xAI的Grok-1等主流大模型都采用了MoE架構。 …

第三方配件也能適配蘋果了,iOS 18與iPadOS 18將支持快速配對

蘋果公司以其對用戶體驗的不懈追求和對創新技術的不斷探索而聞名。隨著iOS 18和iPadOS 18的發布&#xff0c;蘋果再次證明了其在移動操作系統領域的領先地位。 最新系統版本中的一項引人注目的功能&#xff0c;便是對藍牙和Wi-Fi配件的配對方式進行了重大改進&#xff0c;不僅…

python如何計算兩個時間相差多少秒鐘,分鐘,小時,天,月,年

使用場景&#xff1a;在做上課記錄系統的時候&#xff0c;有上課開始時間和上課結束時間&#xff0c;需要計算這兩個時間的插值&#xff0c;以分鐘為單位。 封裝方法如下&#xff1a; from datetime import datetimedef sub_seconds(date1: str "2024-07-11 12:33:33&q…

【CORS 報錯】跨域請求問題:CORS 多種環境下的解決方案

&#x1f525; 個人主頁&#xff1a;空白詩 文章目錄 一、CORS錯誤的常見原因二、解決方案1. Vue3 Vite項目下的解決方案創建Vue3 Vite項目配置Vite的代理發送請求 2. jQuery項目下的解決方案使用CORS請求頭使用JSONP 3. 其他環境下的解決方案使用服務器端代理設置CORS頭使用…