Python正則表達式(Python RegEx)

来源:https://www.cnblogs.com/wind-and-sky/archive/2022/10/24/16821295.html
-Advertisement-
Play Games

Python正則表達式 快速參考 常用函數: re.match():從字元串的起始位置匹配一個正則表達式。 re.search():掃描整個字元串並返回第一個成功的匹配。 re.sub():用於替換字元串中的匹配項。 re.compile():用於編譯正則表達式,生成一個正則表達式(Pattern) ...


Python正則表達式

目錄

快速參考

常用函數:

re.match():從字元串的起始位置匹配一個正則表達式。

re.search():掃描整個字元串並返回第一個成功的匹配。

re.sub():用於替換字元串中的匹配項。

re.compile():用於編譯正則表達式,生成一個正則表達式(Pattern)對象。供match()和search()這兩個函數使用。

re.findAll():在字元串中找到正則表達式所匹配的所有子串,並返回一個列表。

re.finditer():在字元串中找到正則表達式所匹配的所有子串,並返回一個迭代器。

re.split():split 方法按照能夠匹配的子串將字元串分割後返回列表。

元字元:具有特殊含義的字元

1666336822622

特殊序列:特殊序列指的是\後跟下表中的某個字元,擁有特殊含義。

1666336796466

集合:集合(Set)是一對方括弧 [] 內的一組字元,具有特殊含義

1666336893047

正則表達式修飾符

1666338644369

函數詳解

match()

re.match(): 從字元串的起始位置(開頭)匹配一個正則表達式,匹配成功返回一個Match對象,匹配失敗返回None。

re.match(pattern, string, flags=0)
# pattern:正則表達式;string:字元串;flags:正則表達式修飾符

示例:

_str = 'https://www.baidu.com/'
print(re.match('https', _str))
print(re.match('baidu', _str))

結果圖:

1666338757337

re.search():掃描整個字元串來匹配正則表達式,如果匹配成功,則返回第一個匹配成功的Match對象,匹配失敗則返回None。

re.search(pattern,string,flags=0)
# pattern:正則表達式;string:字元串;flags:正則表達式修飾符

示例:

_str = 'https://www.baidu.com/'
print(re.search('baidu', _str))
print(re.search('goole', _str))

結果圖:

1666339370679

捕獲和分組

示例:

_str = 'Cats are smarter than dogs'
# r:字元串為非轉義的原始字元串 ():捕獲和分組 .:除了換行符的所有字元 *:零次或者多次出現
# (.*)是第一個分組,.*表示匹配除了換行符之外的所有字元;(.*?)是第二個分組,.*後面的?代表非貪婪模式,只匹配符合條件的最少的字元
# 最後一個.*不是分組,不會計入匹配結果;|表示兩者任一
# re.M:多行匹配,影響^和$;re.I:大小寫不敏感
# 匹配的正則表達式中的空格對結果影響很大
matchObject = re.match(r'(.*) are (.*?) .*', _str, re.M | re.I)
if matchObject:
    print(matchObject.groups())
    print(matchObject.group())
    print(matchObject.group(1))
    print(matchObject.group(2))

結果截圖:

1666340200947

groups是包含分組匹配項的元組;group()或者group(0)是整個正則表達式的匹配項;group(1)和group(2)分別是兩個分組的匹配項;當調用group(3)時會報錯,因為沒有第三個分組

Match對象

_str = 'https://www.baidu.com/'
_result = re.match('https', _str)
print(_result)
print(_result.span())
print(_result.start())
print(_result.end())
print(_result.group())

1666588115349

sub()

re.sub():用於替換字元串中正則表達式的匹配項。

re.sub(pattern, repl, string, count=0, flags=0)
# pattern:正則表達式;repl:替換的字元串或者函數;string:字元串;
# count:最大替換次數,預設0代表替換所有匹配正則表達式;flags:正則表達式修飾符

示例:

_phone = '2004-959-559 # 這是一個國外電話號碼'

# 刪除字元串中的Python註釋
_phone = re.sub(r'#.*$', '', _phone)
print(_phone)
# 刪除字元串中的-
_num = re.sub(r'\D', '', _phone)
print(_num)
# 刪除字元串中的-
_num = re.sub(r'-', '', _phone)
print(_num)
# 刪除字元串中第一個-
_num = re.sub(r'-', '', _phone, 1)
print(_num)

結果圖:

1666339791448

示例(repl參數是一個函數):

# 將字元串中的匹配的數字*2
def doubleNum(matched):
    _value = int(matched.group('value'))
    return str(_value * 2)


_str = 'cxk666cxk456cxk250'
# 分組匹配
_result = re.sub(r'(?P<value>\d+)', doubleNum, _str)
print(_result)

結果圖:

1666339920168

compile()

compile()函數用於編譯正則表達式,生成一個正則表達式對象(RegexObject) ,供match()和search()這兩個函數使用。

re.compile(pattern[, flags])
# pattern:正則表達式;flags:正則表達式修飾符

示例:

_str = 'cxk666cxk456cxk250'
# re.compile函數,compile函數用於編譯正則表達式,生成一個正則表達式對象
_pattern = re.compile(r'\d+')  # 匹配至少一個數字
_result = _pattern.search(_str)
print(_result)

結果圖:

1666348922399

findall()

findall():在字元串中找到正則表達式所匹配的所有子字元串並返回一個列表。如果有多個匹配模式,則返回元祖列表;如果沒有找到匹配子串,則返回空列表。

findall(string[, pos[, endpos]])
# string:字元串;pos:可選參數,字元串的起始位置,預設為0;endpos:可選參數,字元串的結束位置,預設為字元串長度。

示例:

_str = 'cxk666cxk456cxk250'
_pattern = re.compile(r'\d+')  # 匹配至少一個數字
_result = _pattern.findall(_str)
print(_result)

結果圖:

1666577047867

多個匹配模式示例:

_str = 'cxk666cxk456cxk250'
_pattern = re.compile(r'([a-z]+)(\d+)') #按小寫字母和數字分開匹配
_result = _pattern.findall(_str)
print(_result)

結果圖:

1666577465741

finditer()

finditer():在字元串中找到正則表達式所匹配的所有子串,並將結果作為一個迭代器返回。

re.finditer(pattern, string, flags=0)
# string:字元串;pattern:正則表達式;flags:正則表達式修飾符

示例:

# finditer
_str = 'cxk666cxk456cxk250'
_iter = re.finditer(r'\d+', _str)
for _it in _iter:
    print(_it.group())

結果圖:

1666578148516

split()

split() 方法按照能夠匹配的子串將字元串分割後返回列表。註意:是分割,而不是取某一部分

re.split(pattern, string[, maxsplit=0, flags=0])
# pattern:正則表達式;string:字元串;maxsplit:分隔次數,預設為 0,不限制次數;flags:正則表達式修飾符

示例:

_str = 'cxk sing jump rap basketball'
_result = re.split(r'(\S+ )', _str)
print(_result)

結果圖:

1666581711027

參考博客與示例代碼

示例代碼:https://gitee.com/mr-wildfire/PythonRegExDemo/

參考博客:

​ 感謝:Python 正則表達式 | 菜鳥教程 (runoob.com)

​ 感謝:Python RegEx (w3school.com.cn)


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

-Advertisement-
Play Games
更多相關文章
  • 在筆者前面有一篇文章`《驅動開發:斷鏈隱藏驅動程式自身》`通過摘除驅動的鏈表實現了斷鏈隱藏自身的目的,但此方法恢復時會觸發PG會藍屏,偶然間在網上找到了一個作者介紹的一種方法,覺得有必要詳細分析一下他是如何實現的進程隱藏的,總體來說作者的思路是最終尋找到`MiProcessLoaderEntry`的... ...
  • 前言 一. 數據來源分析 明確需求, 我們採集網上什麼數據內容, 在什麼地方 分析我們想要高清原圖在什麼地方有 瀏覽器自帶工具: 開發者工具 F12 滑鼠右鍵點擊 插件 選擇 network 刷新網頁 點擊選擇 Img 可以直接找到圖片地址 通過搜索分析, 可以知道, 我們想要圖片原圖url 就在 ...
  • Eclipse插件開發的點點滴滴 新公司做的是桌面應用程式, 與之前一直在做的web頁面 ,相差甚大 。 這篇文章是寫於2022年10月底,這時在新公司已經入職了快三月。寫作目的是:國內對於eclipse插件開發相關的文檔是少之又少,這三個月我們小組翻遍了國外文檔,勉強將軟體拼湊出並release出 ...
  • @ 起因 近期身邊的一位朋友來尋求幫助,她在日常工作時,總是需要做一些重覆的事情,所以想著是否能通過程式實現自動化的操作。 具體需求為,每天會收到一份固定格式的Word文件,然後根據其中的內容,填充到固定的PPT模板中,最終生成圖片輸出。 過程 確定工具 有了需求後,第一件事自然是在網路上查找是否有 ...
  • django原生api介面 1.1 創建django項目 django-admin startproject drfdemo1 1.2 創建app django-admin startapp app 1.3 創建數據模型 app/models.py中編寫如下代碼: from django.db im ...
  • 摘要:本篇將介紹NMT追蹤區域的部分記憶體類型——Java heap、Class、Thread、Code 以及 GC。 本文分享自華為雲社區《Native Memory Tracking 詳解(2):追蹤區域分析(一)》,作者:畢昇小助手。 本篇將介紹NMT追蹤區域的部分記憶體類型——Java heap ...
  • 公司新開發的項目上線了,出於好奇心,打算將網站服務改為swoole測一下性能,正好換了個新電腦,可以從頭安裝一下Swoole擴展,卻發現蘋果電腦M1晶元安裝起擴展來有很多坑,花了一下午時間才搞好,網路上的解決方案都不全或者很分散,在此整合記錄一下。 一、下載 Mac上安裝擴展有兩種方式,可以用PHP ...
  • 分散式鎖的演進 基本原理 我們可以同時去一個地方“占坑”,如果占到,就執行邏輯。否則就必須等待,直到釋放鎖。“占坑”可以去redis,可以去資料庫,可以去任何大家都能訪問的地方。等待可以自旋的方式。 階段一 public Map<String, List<Catalog2Vo>> getCatalo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...