Python正則表達式(小結)

来源:https://www.cnblogs.com/xuliuzai/archive/2023/12/02/17850543.html
-Advertisement-
Play Games

acwing week2 基礎演算法3總結 總結點1:雙指針演算法 //常用模版框架 for (int i = 0, j = 0; i < n; i ++ ) { while (j < i && check(i, j)) j ++ ; } 常見問題分類: (1) 對於一個序列,用兩個指針維護一段區間 ( ...


1. 什麼是正則表達式?

正則表達式(regular expression,有時簡寫為RegEx 或 regex)就是用一組由字母和符號組成的“表達式”來描述一個特征,然後去驗證另一個“字元串”是否符合/匹配這個特征。

2.應用場景?

(1)驗證字元串是否符合指定特征,比如驗證郵件地址是否符合特定要求等;

(2)用來查找字元串,從一個長的文本中查找符合指定特征的字元串;

(3)用來替換,比普通的替換更強大。

3.相應的模塊--re

re模塊是Python用來處理正則表達的模塊,是Python處理文本的標準庫。所謂的Python標準庫,就是內置模塊,不需要額外下載,使用時直接引入即可。

 4.常用函數

類別 函數 用途 表達式 remark
查找一個匹配項 re.search() 查找任意位置的匹配項. re.search(pattern,string,flags)

search函數是在字元串中任意位置匹配,只要有符合正則表達式的字元串就匹配成功,即使有兩個匹配項,search函數也只返回一個。

pattern: 正則表達式的字元串或原生字元串表示;string待匹配字元串;flags:正則表達式使用時的控制標記。

返回Match對象。

re.match() 必須從字元串開頭匹配. re.match(pattern,string,flags)

match函數是要從頭開始匹配,如果開頭不一樣,一定無法匹配。

從一個字元串的開始位置匹配正則表達式,返回Match對象。

pattern: 正則表達式的字元串或原生字元串表示;string待匹配字元串;flags:正則表達式使用時的控制標記。

返回Match對象。

re.fullmatch() 整個字元串與正則完全匹配.

re.fullmatch(pattern,string,flags)

fullmatch函數需要完全相同,匹配整個字元串,返回Match對象。不匹配時,返回None。

返回Match對象。

查找多個匹配項 re.findall() 從字元串任意位置查找,返回一個列表.

 re.findall(pattern,string,flags)

搜索字元串,以列表形式返回全部能匹配的子串。

返回列表類型。

兩個方法基本類似,只不過一個是返回列表,一個是返回迭代器。列表是一次性生成在記憶體中,而迭代器是需要使用時一點一點生成出來的,記憶體使用更優。
re.finditer() 從字元串任意位置查找,返回一個迭代器.

 re.finditer(pattern,string,flags)

搜索字元串,返回一個匹配結果的迭代類型,每個迭代元素是Match對象。

分割 re.re.split() 支持正則分割 re.split(pattern, string, maxsplit=0, flags=0) 

函數:將一個字元串按照正則表達式匹配結果進行分割,返回列表類型。

用 pattern 分開 string , maxsplit表示最多進行分割次數, flags表示模式。

返回列表類型。

替換 re.sub() 支持正則替換 re.sub(pattern, repl, string, count=0, flags=0)

函數:在一個字元串中替換所有匹配正則表達式的子串,返回替換後的字元串。

repl替換掉string中被pattern匹配的字元, count表示最大替換次數,flags表示正則表達式的常量。

re.subn() 支持正則替換 re.subn(pattern, repl, string, count=0, flags=0)  函數與 re.sub函數 功能一致,只不過返回一個元組 (字元串, 替換次數)。
編譯正則對象 re.compile()  編譯正則表達式  返回Pattern對象。

將正則表達式的樣式編譯為一個 正則表達式對象 (正則對象Pattern),這個對象與re模塊有同樣的正則函數。template()增加了re.TEMPLATE 模式。

re.template()    
其他 re.escape()   re.escape(pattern) re.escape(pattern) 可以轉義正則表達式中具有特殊含義的字元,比如:.或者 *。使用是,應小心轉義符的問題。
re.purge() 清除正則表達式緩存    

註意:查找一個匹配項(search、match、fullmatch)的函數返回值都是一個 匹配對象Match ,必須需要通過match.group() 獲取匹配值。

5.什麼是Match對象?有什麼屬性和方法?

在上面4的說明中,我們提到search、match、fullmatch函數的返回值是一個Match對象,這個對象中包含了很多匹配的信息。

類別 名稱 解釋
對象屬性 string 待匹配的文本。
re 匹配時使用的Pattern對象(正則表達式)
pos 正則表達式搜索文本的開始位置。
endpos 正則表達式搜索文本的結束位置。
對象方法 start() 匹配字元串在原始字元串的開始位置。
end() 匹配字元串在原始字元串的結束位置。
span() 匹配區域,返回(start(),end())。
group() 獲得匹配後的字元串。
groups() 獲取每部分匹配的字元串,元組類型。

註意group()和groups()的區別,一個是返回匹配的字元串,一個是返回各部分匹配內容組成的元組。

6.表達式中的控制標記flags

flags:正則表達式使用時的控制標記

常用標記 標記功能說明

re.I(re.IGNORECASE)

 re.I是正則表達式中的一個flag,用於忽略大小寫。當我們想要匹配的字元串中包含大小寫不敏感的內容時,可以使用這個flag。

例如,我們想要匹配字元串中的"apple",不論是大寫還是小寫,都可以使用re.I來實現。

re.M(re.MULTILINE)

 re.M是正則表達式中的另一個flag,用於多行匹配。通常情況下,正則表達式預設只匹配字元串中的一行內容,但是當我們需要匹配多行內容時,就可以使用re.M。

例如,我們想要匹配字元串中的以數字開頭的所有行,就可以使用re.M。

re.S(re.DOTALL)  re.S是正則表達式中的一個flag,用於匹配任意字元,包括換行符。如不設置re.DOTALL這個Flag標識位,符號“.”匹配除換行符外的一切。而一旦設置了這個標識位,符號“.”將啥都匹配。
re.X(re.VERBOSE)

忽略空白,提高可讀性。當該標誌被指定時,在 RE 字元串中的空白符被忽略,除非該空白符在字元類中或在反斜杠之後。它也可以允許你將註釋寫入 RE,這些註釋會被引擎忽略;註釋用 “#”號 來標識,不過該符號不能在字元串或反斜杠之後。

7.在表達式中強調開始\結束位置的特殊字元

表達式用到的特殊字元 說明 舉例
^ 與字元串開始的地方匹配,此字元不匹配任何字元. 表達式 "^aaa" 在匹配 "xxxaaaxxx" 時,匹配失敗。只有當 "aaa" 位於字元串的開頭的時候,"^aaa" 才能匹配,如:"aaaxxxxxx"。
$ 與字元串結束的地方匹配,此字元不匹配任何字元. 達式 "aaa$"在匹配 "xxxaaaxxx" 時,匹配失敗。只有當"aaa"位於字元串的結尾的時候,"aaa$"才能匹配,比如:"xxxxxxaaa"。

8.表達式中的轉義符(\) 

一些不便書寫的字元和特殊用處的標點符號,採用在前面加“\” (轉義符).

表達式 可匹配 表達式 可匹配
\n 匹配換行符 \? 匹配?符號本身
\t 匹配製表符 \* 匹配*符號本身
\\ 匹配\符號本身 \+ 匹配+符號本身
\^ 匹配^符號本身 \{、\} 匹配大括弧
\$ 匹配$符號本身 \[、\] 匹配中括弧
\. 匹配.符號本身 \(、\) 匹配小括弧

9.能夠與 '多種字元' 匹配的表達式

 正則表達式中的一些表示方法,可以匹配 ‘多種字元’ 中的任意一個字元。例如,表達式"\d" 可以匹配任意一個數字。雖然可以匹配其中任意字元,但是只能是一個,不是多個。

表達式 匹配功能
\d 任意一個數字,0~9中的任意一個
\w 任意一個字母或數字或下劃線,也就是A~Z,a-z,0-9,_中任意一個
\s 包括空格\製表符\換頁符等空白符的其中的任意一個
. 小數點可以匹配除了換行符(\n)以外的任意一個字元

10.表達匹配次數

表達式 匹配功能 例子
{n} 表達式重覆n次 例如:"\w{2}"相當於"\w\w";"a{5}"相當於"aaaaa"
{m,n} 表達式至少重覆m次,最多重覆n次 例如:"ba{1,3}" 可以匹配"ba"或"baa"或"baaa"
{m,} 表達式至少重覆m次 例如:"\w\d{2,}"可以匹配"a12","_456","M12344"
? 匹配表達式0次或1次,相當於{0,1} 例如:"a[cd]?"可以匹配"a","ac","ad"
+ 表達式至少出現1次,相當於{1,} 例如:"a+b" 可以匹配"ab","aab","aaab"
* 表達式不出現或出現任意次數,相當於{0,} 例如:"\^*b"可以匹配"b","^^^b"

11.藉助[]和^自定義匹配關係

使用方括弧 [ ] 包含一系列字元,能匹配其中任意一個字元。用 [^ ] 包含一系列字元,則能匹配其中字元之外的任意一個字元。

表達式案例 匹配功能
[abc5@] 匹配"a"或"b"或"5"或"@"
[^abc] 匹配"a","b","c"之外的任意一個字元
[f-k] 匹配"f"~"k"之間的任意一個字元
[^A-F0-3] 匹配"A"~"F","0"~"3"之外的任意一個字元。

註意:雖然可以匹配其中任意一個,但是只能是一個,不是多個。 

 12.字元串中關於IP的正則表達式

    ##字元串中關於IP地址的正則表達式
    ## ^:匹配字元串的開頭。((25[0-5]|2[0-4]\d|[01]?\d\d?)\.):匹配一個數字和一個點號,這個數字的取值範圍是0到255。
    ## {3}:匹配前面的表達式三次。(25[0-5]|2[0-4]\d|[01]?\d\d?):   配一個數字,這個數字的取值範圍是0到255。$:匹配字元串的結尾。
    ## 使用正則表達式匹配IP地址
    # 字元串是IP地址
    ip_pattern = r'^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$'
    ##字元串是IP地址開頭的
    ipstart_pattern = r'^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)'
    ##字元串包含IP
    ipcontain_pattern = r'((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)'   
    ##字元串包含IP,並且IP地址是以': ['字元開頭,以']'字元結尾
    ipcontain_pattern_plus = r'(\: \[)((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\])' 

 

參考網址

https://zhuanlan.zhihu.com/p/479731754

https://zhuanlan.zhihu.com/p/127807805

https://www.bilibili.com/read/cv25901174/?jump_opus=1

https://www.bilibili.com/video/BV1TJ411Y7JX?p=156


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 官網 Mongoose.js中文網 (mongoosejs.net) 基本使用 安裝 最新的是mongoose8.0.0版本,基於Promise,以前的版本是基於回調函數。 npm npm i mongoose yarn yarn add mongoose 使用 以mongoose8.0.0舉例: ...
  • 最近有個需求需要實現自定義首頁佈局,需要將屏幕按照 6 列 4 行進行等分成多個格子,然後將組件可拖拽對應格子進行渲染展示。 示例 對比一些已有的插件,發現想要實現產品的交互效果,沒有現成可用的。本身功能並不是太過複雜,於是決定自己基於 vue 手擼一個簡易的 Grid 拖拽佈局。 完整源碼在此,在 ...
  • 項目背景: vue 1.創建 backtop.vue 的回到頂部邏輯的組件 <template> <transition name="back-up-fade"> <div class="back-top" :style="{ bottom: bottom + 'px', right: right ...
  • 理解 async/await 的原理和使用方法是理解現代JavaScript非同步編程的關鍵。這裡我會提供一個詳細的實例,涵蓋原理、流程、使用方法以及一些註意事項。代碼註釋會儘量詳盡,確保你理解每個步驟。 實例:使用async/await進行非同步操作 <!DOCTYPE html> <html lan ...
  • 本文檔譯自 www.codeproject.com 的文章 "Calling Conventions Demystified",作者 Nemanja Trifunovic,原文參見此處 引言 - Introduction 在學習 Windows 編程的漫長、艱難而美妙的旅途中,你可能會對函數聲明前出 ...
  • 如何使用mysql實現可重入的分散式鎖 目錄 什麼是分散式鎖? 如何實現分散式鎖? 定義分散式表結構 定義鎖統一介面 使用mysql來實現分散式鎖 ① 生成線程標記ID ② 加鎖 ③ 解鎖 ④ 重置鎖 寫在最後 1. 什麼是分散式鎖? 百度百科:分散式鎖是控制分散式系統之間同步訪問共用資源的一種方式 ...
  • Scikit-learn是一個基於Python的開源機器學習庫,它提供了大量的機器學習演算法和工具,方便用戶進行數據挖掘、分析和預測。 Scikit-learn是基於另外兩個知名的庫 Scipy 和 Numpy的,關於 Scipy 和 Numpy 等庫,之前的系列文章中有介紹: Scipy 基礎系列 ...
  • 第二部分主要涵蓋了 SpringMVC 中作用域處理,介紹了 Request 作用域、Session 作用域和應用作用域的處理方式,以及 @ModelAttribute 註解的使用和 ModelAndView 的使用方法;最後,探討了靜態資源的處理方式,包括使用 DefaultServlet 或者 ... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...