python正則-re的使用

来源:https://www.cnblogs.com/dongyangblog/archive/2019/07/27/11257023.html
-Advertisement-
Play Games

今天在刷題的時候用到了正則,用的過程中就感覺有點不太熟練了,很久沒有用正則都有點忘了。所以現在呢,我們就一起來review一下python中正則模塊re的用法吧。 今天是review,所以一些基礎的概念就不做介紹了,先來看正則中的修飾符以及它的功能: 修飾符 re.I 使匹配對大小寫不敏感 re.L ...


今天在刷題的時候用到了正則,用的過程中就感覺有點不太熟練了,很久沒有用正則都有點忘了。所以現在呢,我們就一起來review一下python中正則模塊re的用法吧。

今天是review,所以一些基礎的概念就不做介紹了,先來看正則中的修飾符以及它的功能:

修飾符

  • re.I 使匹配對大小寫不敏感
  • re.L 做本地化識別匹配
  • re.M 多行匹配,影響^和$
  • re.S 使.匹配包括換行在內的所有字元
  • re.U 根據Unicode字元集解析字元.這個標誌影響\w \W \b \B
  • re.X 該標誌通過給予你更靈活的格式以便你將正則表達式寫的更易於理解.

模式

  • ^ 匹配字元串開頭
  • $ 匹配字元串結尾
  • . 匹配人以字元,除了換行符號.當re.DOTAALL標記被指定時,則可以匹配包括換行符的任意字元.
  • [...] 用來表示一組字元,單獨列出:[amk]匹配a,m或k
  • [^...] 不在[]中的字元:[^amk]匹配除amk之外的字元
  • re* 匹配0個或多個的表達式
  • re+ 匹配1個或多個的表達式
  • re? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式.
  • re{n} 精準匹配n個前面表達式
  • re{n,} 匹配大於等於n個前面表達式
  • re{n,m} 匹配n到m個前面的表達式定義的片段,貪婪方式
  • a|b 匹配a或b
  • (re) 對正則表達式分組,並記住匹配的文本
  • (?imx) 正則表達式包含三種可選標誌,imx,隻影響括弧中的區域.
  • (?-imx) 正則表達式關閉imx可選標誌,隻影響括弧中的區域.
  • (?:re) 類似(...)但不表示一個組
  • (?imx:re) 在括弧中使用imx可選標誌
  • (?-imx:re) 在括弧中不是用imx可選標誌
  • (?#...) 註釋
  • (?=re) 前向肯定界定符.如果所含正則表達式,以...表示,在當前位置成功匹配時成功,否則失敗.但一旦所含表達式已經嘗試,匹配引擎根本沒有提高,模式的剩餘部分還要嘗試界定符右邊.
  • (?!re) 前向否定界定符.與肯定界定符相反;當所含的表達式不能在字元串當前位置匹配成功時成功.
  • (?>re) 匹配的獨立模式,省去回朔.
  • \w 匹配字元數字以及下劃線
  • \W 匹配非字母數字下劃線
  • \s 匹配任意空白字元,等價於[\t\n\r\f]
  • \S 匹配任意非空白字元
  • \d 匹配任意數字
  • \D 匹配任意非數字
  • \A 匹配字元串開始
  • \Z 匹配字元串結束,如果是存在換行,只匹配到換行前的結束字元串.
  • \z 匹配字元串結束
  • \G 匹配最後匹配完成的位置
  • \b 匹配一個單詞邊界,也就是指單詞和空格之間的位置
  • \B 匹配非單詞邊界
  • \n \t 匹配一個換行符,一個製表符
  • \1...\9 匹配第n個分組的內容

上面這些呢,是我們會用到的一些模式,這裡面絕大部分都是應該熟記於心的。

接下來我們看re的一些方法:

re.compile

這個方法會生成一個正則對象,他的第一個參數是正則字元串,第二個參數是修飾符,就是 re.I, re.S 這些。

生成的這個正則對象呢,它還有一些方法,比如match、findall、finditer、search等等,這些方法的用法請往下看。

re.match

match方法是從給定字元串的開頭開始進行匹配,並且只匹配一次。也就是說如果字元串和正則的第一個字母就對不上那就匹配失敗了。

ta的參數是pettern,string,flags

  • pettern 就是正則字元串,如果是通過re.compile方法生成的正則對象.match來調用的話,就不需要這個參數了,因為正則對象本身就代表了一個正則匹配模式。

  • string 就是要進行匹配的目標字元串

  • flags 就是正則的修飾符,比如 re.I

match 如果匹配失敗返回None,匹配懲罰返回的則是一個match對象。

match對象有一些方法,比較常用的有:span、group、groups等等

  • span 方法返回的一個二元組,分別表示匹配字元串在目標字元串中的起始下標和結束下標
  • group 函數有一個int類型的參數,參數為0表示返回正則匹配的字元串,參數為1返回正則中第一個組匹配的內容,2返回第二組的內容一次類推
  • groups 函數是所有group函數結果組成一個元組。

re.search

search 函數和 match 函數是類似的,區別在於match方法是只在目標函數開頭匹配一次;search函數是在整個目標函數上匹配一次,一次匹配成功後不再進行匹配。

同樣search方法返回的也是一個match對象,用法和match方法返回的結果一樣。

re.split

split 函數是用來分割字元串的一個函數。它的功能就是根據匹配的字元串對目標字元串進行分割,返回的結果是一個列表。

需要註意的是,如果正則中有組,組內的字元在結果列表中也會保留,不是組內的字元在結果列表中不會被保留。什麼意思呢?通過一個例子來看一下:

st = 'www.baidu.com www.taobao.com'
result = re.split('bai(du)', st)

print(result)

結果:['www.', 'du', '.com www.taobao.com']

可以看到,字元串‘du’是被括弧括起來的,所以在結果中也有'du'這個元素,而'bai'沒有被括弧括起來,在結果中就不會有‘bai’這個元素。

re.findall

這個函數是我在爬蟲項目中用的最多的一個函數了,它可以把所有匹配的結果以列表的形式返回,而不是像match和search一樣只匹配一個結果。我們來試一下:

st = 'www.baidu.com www.taobao.com'
result = re.findall(r'www\.(\w*)\.(com)', st)
print(result)

[('baidu', 'com'), ('taobao', 'com')]

re.finditer

這個函數和findall的功能一樣。不同之處在於這個函數返回的結果是一個生成器,而生成器中的每一項是一個match對象,我們一起來看一下:

st = 'www.baidu.com www.taobao.com'
result = re.finditer(r'www\.(\w*)\.(com)', st)
print(result.__next__().group(0, 1, 2))
print(next(result).groups(2))
('www.baidu.com', 'baidu', 'com')
('taobao', 'com')

re.sub

這個函數是用來替換字元串的。可以將匹配的字元串替換成指定的字元串,我們來看一下:

st = 'www.111.com www.222.com'
result = re.sub(r'\d+', 'OK', st)
print(result)

結果:www.OK.com www.OK.com

我們的第二個參數除了可以是一個給定的字元串還可以是一個函數:

def toOK(matched):
    value = matched.group()
    return str(int(value)*2)


st = 'www.111.com www.222.com'
result = re.sub(r'\d+', toOK, st)
print(result)

結果:www.222.com www.444.com

好,我們今天的review就到這裡了,你掌握了嗎?對於正則你還知道哪些更高級的用法呢,留言告訴我吧。


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

-Advertisement-
Play Games
更多相關文章
  • 感謝原文出處:https://www.cnblogs.com/javazhiyin/ Spring 框架就像一個家族,有眾多衍生產品例如 boot、security、jpa等等。但他們的基礎都是Spring 的 ioc和 aop ioc 提供了依賴註入的容器 aop ,解決了面向橫切麵的編程,然後在 ...
  • 配置JMX遠程連接 1. 配置啟動參數 啟動jar時,添加如下配置 啟動參數說明 1. :配置一個遠程伺服器上未被占用的埠 2. :配置 JMX 是否啟用 ssl 3. :配置 JXM 是否啟動鑒權 4. :配置伺服器 IP 2. 配置 jvisualvm 添加遠程主機信息,填寫主機名,埠。埠 ...
  • 午休後,看看電視,在回顧下新的知識 函數。相信很多小伙伴在學習python後 ,學到函數就會有一部分人放棄了,從努力到放棄(內容過於真實) 好希望我也能有很多粉絲,hhh.... 函數: 什麼是函數?作用是什麼呢? 函數就是讓我們來偷懶的,沒錯,就是這樣簡單粗暴的解釋。。。 作用呢?就是我們定義的函 ...
  • 1.變數的輸入: input函數: input() input("請輸入銀行卡密碼") password = input("請輸入銀行卡密碼") 變數名 = input("XXX") # 用輸入函數給變數賦值 輸入函數給變數賦值舉例: 註:所有input()得到的數據類型都是str字元串類型 2.變 ...
  • 輸出函數是最常用的,對print()參數的準確認識尤為重要。 sep='':sep參數表示函數中不同value的分隔符,預設為一個空格。 end='':end參數表示函數結尾的處理,預設換行。 例如: ...
  • Swing的輸入框仍然分成兩類:單行輸入框和多行輸入框,但與AWT的同類控制項相比,它們在若幹細節上有所調整。首先說單行輸入框,AWT的單行輸入框名叫TextField,平時輸入什麼字元它便顯示什麼字元,可一旦調用了setEchoChar方法設置回顯字元,TextField馬上變成只顯示密文字元了。然 ...
  • 在使用Visual C++ 6.0打開文件時可能會出現下麵的情況 這可能是Vc6.0和win7相容性問題。 方法: 下載filetool即可 鏈接:https://pan.baidu.com/s/1Xmx0XI0Dy9uZGJEQW4cHQg 提取碼:drgz 下載之後,解壓到一個目錄,我這個是解壓 ...
  • 關於python單例模式是什麼,以及一些實現方法的整理與講解。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...