正則表達式(知識總結篇)

本篇文章主要是針對初學者,對正則表達式的理解、作用和應用

正則表達式🌟

    • 一、🍉正則表達式的概述
    • 二、🍉正則表達式的語法和使用
    • 三、 🍉正則表達式的常用操作符
    • 四、🍉re庫主要功能函數


一、🍉正則表達式的概述

  • 通用的字符串表達框架
  • 簡潔表達一組字符串的表達式
  • 針對字符串表達“簡潔”和“特征”思想的工具
  • 判斷某字符串的特征歸屬

正則表達式在文本處理中十分常用

  1. 表達式文本類型的特征(病毒、入侵等)
  2. 同時查找或替換一組字符串
  3. 匹配字符串的全部或部分

二、🍉正則表達式的語法和使用

  1. 語法:

    正則表達式語法由字符和操作符構成

P(Y|YT|YTH|YTHO)?N
  1. 使用

    編譯:將符合正則表達式語法的字符串轉換成正則表達式特征。

在這里插入圖片描述

三、 🍉正則表達式的常用操作符

操作符說明實例
.表示任何單個字符
[ ]字符集,對單個字符給出取值范圍[abc]表示a、b、c,[a-z]表示a到z單個字符
[ ^ ]非字符集,對單個字符給出排除范圍[^abc]表示非a或b或c的單個字符
*前一個字符0次或無限次擴展abc*表示ab、abc、abcc、abcc等
+前一個字符1次或無限次擴展abc+表示abc、abcc、abccc等
?前一個字符0次或1次擴展abc?表示av、abc
|左右表達式任意一個abc|def表示abc、def
{m}擴展前一個字符m次ab{2}c表示abbc
{m,n}擴展前一個字符m至n次(含n)ab{1,2}c表示abc、abbc
^匹配字符串開頭^abc表示abc且在一個字符串的開頭
$匹配字符串結尾abc$表示abc且在一個字符串的結尾
()分組標記,內部只能使用|操作符(abc)表示abc,(abc|def)表示abc、def
\d數字,等價于[0-9]
\w單詞字符,等價于[A-Za-z0-9]

四、🍉re庫主要功能函數

函數說明
re.search(pattern, string)在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
re.match(pattern, string)從一個字符串的開始位置起匹配正則表達式,返回match對象
re.findall(pattern, string)搜索字符串,以列表類型返回全部能匹配的子串
re.split(pattern, string)將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
re.finditer(pattern, string)搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
re.sub(pattern, string)在一個字符串中替換所有匹配正則表達式的字串,返回替換后的字符串
re.compile(pattern[, flags])
re.escape(string)

re模塊中常用函數的簡單介紹:

語法:

re.函數(pattern, string,flags=0)
  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記
  1. re.search(pattern, string,flags=0):
    在字符串中搜索匹配正則表達式pattern的第一個位置,返回一個匹配對象,如果沒有找到匹配的,則返回None。

    import re
    match = re.search(r'\d+', 'hello 123 world')
    if match:print('找到匹配:', match.group())
    else:print('未找到匹配')
    
  2. re.match(pattern, string,flags=0):
    從字符串的起始位置匹配正則表達式pattern,如果起始位置沒有匹配到,則返回None。注意這與search()不同,search()會掃描整個字符串以查找匹配項。

    match = re.match(r'\d+', '123 hello world')
    if match:print('找到匹配:', match.group())
    else:print('未找到匹配')
    
  3. re.findall(pattern, string):
    返回字符串中所有與正則表達式pattern相匹配的所有非重疊匹配項的列表。如果未找到匹配項,則返回空列表。

    matches = re.findall(r'\b\w+\b', 'Hello World! This is a test.')
    print(matches)
    # 輸出:['Hello', 'World', 'This', 'is', 'a', 'test']
    
  4. re.sub(pattern, repl, string, count=0, flags):
    將字符串中所有與正則表達式pattern匹配的部分替換為repl,并返回修改后的字符串。count參數可以指定替換的最大次數,默認為0,表示替換所有匹配項。

    result = re.sub(r'\d+', 'NUMBER', 'hello 123 world 456')
    print(result)
    # 輸出:'hello NUMBER world NUMBER'
    
  5. re.compile(pattern[, flags]):
    編譯正則表達式字符串為一個正則表達式對象,這樣可以提高使用相同模式進行多次匹配的效率。

    pattern = re.compile(r'\d+')
    match = pattern.match('123 hello')
    if match:print('找到匹配:', match.group())
    
  6. re.escape(string):
    轉義字符串中的特殊字符,使得它們在正則表達式中作為字面值字符對待。

    pattern = re.compile(re.escape('[') + r'\d+' + re.escape(']'))
    match = pattern.search('[123]')
    if match:print('找到匹配:', match.group())
    
  7. re.split(pattern,string,maxsplit=0,flags=0):

    將一個字符串按照正則表達式匹配進行分割返回列表類型

    • maxsplit:最大分割數,剩余部分作為最后一個元素輸出
    import re
    result1=re.split(r'[1-9]\d{5}','BIT100081 TSU100084')
    print(result1)
    result2=re.split(r'[1-9]\d{5}','BIT100081 TSU100084',maxsplit=1)
    print(result2)
    
  8. re.finditer(pattern, string):

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

    import re
    for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):if m:print(m.group(0))
    

拓展:

  1. re庫的另一種等價用法:
# 第一種 函數式用法:一次性操作
rst=re.search(r'[1-9]\d{5}','BIT 100081')
# 第二種 面對對象用法:編譯后的多次操作
pat=ree.compile(r'[1-9]\d{5}')
rst=pat.search('BIT 100081')
  1. match對象介紹

    Match對象一次匹配的結果,包含匹配的很多信息

    import re
    match=re.search(r'[1-9]\d{5}','BIT 100081')
    if match:print(match.group(0))print(type(match))
    

    match對象的屬性:

    屬性說明
    .string待匹配的文本
    .re匹配時使用的patter對象(正則表達式)
    .pos正則表達式搜索文本的開始位置
    .endpos正則表達式搜索文本的結束位置

    match對象的方法:

    方法說明
    .group(0)獲得匹配的字符串
    .start()匹配字符串在原始字符串的開始位置
    .end()匹配字符串在原始字符串的結束位置
    .span()返回(.start(),.end())
    import re
    match=re.search(r'[1-9]\d{5}','BIT100081 TSU100084')
    print(match.string)
    print(match.re)
    print(match.pos)
    print(match.endpos)
    print(match.group(0))
    print(match.start())
    print(match.end())
    print(match.span())
    
  2. 貪婪匹配

    Re默認采用貪婪匹配,即輸出匹配最長的字串

    import re
    match=re.search(r'PY.*N','PYANBNCNDN')
    print(match.group(0))
    

    最小匹配:如何輸出最短的子串呢?

    import re
    match=re.search(r'PY.*?N','PYANBNCNDN')
    print(match.group(0))
    

    最小匹配操作符

    操作符說明
    *?前一個字符0次或無限次擴展,最小匹配
    +?前一個字符1次或無限次擴展,最小匹配
    ??前一個字符0次或1次擴展,最小匹配
    {m,n}?擴展前一個字符m至n次(含n),最小匹配
  3. 典型例子:

    在Python中,可以使用re模塊(正則表達式模塊)來匹配IP地址。一個基本的IPv4地址由四個0到255之間的數字組成,每部分之間用點(“.”)分隔。下面是一個簡單的例子,展示了如何編寫一個正則表達式來匹配這樣的IP地址:

import redef is_valid_ip(ip):# 定義IP地址的正則表達式ip_pattern = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')# 使用正則表達式匹配IP地址if ip_pattern.match(ip):return Trueelse:return Falseif __name__ == '__main__':# 測試函數ips = ["192.168.1.1", "255.255.255.255", "123.456.789.0", "1.2.3"]for ip in ips:print(f"{ip}: {is_valid_ip(ip)}")

這段代碼首先導入了re模塊,并定義了一個函數is_valid_ip,該函數使用一個正則表達式來檢查輸入的字符串是否符合IPv4地址的格式。正則表達式的詳細解釋如下:

  • ^:表示字符串的開始。
  • ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}:這部分匹配前三部分的數字,每部分數字范圍是0到255,后面跟著一個點(“.”)。其中,
    • 25[0-5] 匹配從250到255的數字,
    • 2[0-4][0-9] 匹配從200到249的數字,
    • [01]?[0-9][0-9]? 匹配0到199的數字,包括前導零的情況。
    • \. 表示匹配點字符本身(因為點在正則表達式中有特殊含義,所以需要用反斜杠轉義)。
  • (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$:這部分匹配第四部分的數字,后面跟上字符串的結束標志$

經典正則表達式實例:

表達式解釋
^ [A - Za-z]+$由26個字母組成的字符串
^ [A-Za-Z0-9]+$由26個字母和數字組成的字符串
^- ? \d+$整數形式的字符串
^ [0-9] * [1-9] [0-9] * $正整數形式的字符串
[1-9] \d{5}中國境內郵政編碼,6位
[\u4e00-\u9fa5]匹配中文字符
\d{3}-d{8}|\d{4}-\d{7}國內電話號碼,010-68913536

在這里插入圖片描述

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

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

相關文章

遠動通訊屏柜的組成及各裝置的作用

遠動通訊屏柜的組成及各裝置的作用 遠動通訊屏是基于公共電網安全而投入的遠方監控遙控設備;主要由遠動裝置、通訊管理機、交換機、調制解調器、GPS對時裝置、數字通道防雷器、模擬通道防雷器、插線板、空氣開關、屏柜及附件等設備組成、標配尺寸2260*800*600&…

C++設計模式---面向對象原則

面向對象設計原則 原則的目的:高內聚,低耦合 1. 單一職責原則 類的職責單一,對外只提供一種功能,而引起類變化的原因都應該只有一個。 2. 開閉原則 對擴展開放,對修改關閉;增加功能是通過增加代碼來實現的&…

【linux特殊符號】

文章目錄 學習目標一、Linux的特殊符號1.系統變量2.引號 總結 學習目標 1.學會查看系統變量 2.學會各種引號 3.一、Linux的特殊符號 1.系統變量 windows系統變量:echo %path% linux系統變量:echo $PATH2.引號 " " 雙引號,換行…

如何基于springboot構建cas最新版源碼?

環境準備 下載JDK21 https://download.oracle.com/java/21/archive/jdk-21.0.2_windows-x64_bin.zip下載gradle 8.5并配置環境變量 https://gradle.org/next-steps/?version8.5&formatbin下載項目git clone http://gitlab.ruishan.cc/meta/anka-authentication.git 開始…

Maven工具

Maven是apache軟件基金會的一個開源項目 是一個項目構建(項目管理)工具 用來幫助開發者管理項目中的 jar文件,以及 jar文件 之間的依賴關系(在A.jar文件中,用到了B.jar)、完成項目的編譯(.java->.class)、測試、打…

web前端項目已有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的方法

如果是第一次導入阿里巴巴圖標請參考: vue項目引入阿里云圖標_vue引用阿里云圖標fontclass-CSDN博客 本文主要想講在項目原有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的解決辦法: 1.iconfont.json對應修改就行,這個簡單一看就明白; 2.iconfont.js主要改動<symbol><…

從零入門激光SLAM(二十)——IESKF代碼實現

大家好呀&#xff0c;我是一個SLAM方向的在讀博士&#xff0c;深知SLAM學習過程一路走來的坎坷&#xff0c;也十分感謝各位大佬的優質文章和源碼。隨著知識的越來越多&#xff0c;越來越細&#xff0c;我準備整理一個自己的激光SLAM學習筆記專欄&#xff0c;從0帶大家快速上手激…

Ansible自動化運維中的file文件模塊模塊應用詳解

作者主頁&#xff1a;點擊&#xff01; Ansible專欄&#xff1a;點擊&#xff01; 創作時間&#xff1a;2024年5月21日15點21分 &#x1f4af;趣站推薦&#x1f4af; 前些天發現了一個巨牛的&#x1f916;人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xf…

【Java筆記】第8章:面向對象的三大特性(封裝、繼承、多態)

前言1. 三大特性概述2. 封裝3. 繼承4. 多態結語 #include<GUIQU.h> int main { 上期回顧:【Java筆記】第7章&#xff1a;面向對象 個人主頁&#xff1a;C_GUIQU 歸屬專欄&#xff1a;【Java學習】 return 一鍵三連; } 前言 各位小伙伴大家好&#xff01;上期小編給大家…

后端技術常用網站

技術說明官網SpringBootMVC框架https://spring.io/projects/spring-bootSpringCloud微服務框架https://spring.io/projects/spring-cloud/MyBatis-PlusORM框架https://mp.baomidou.com/Swagger-UI文檔生產工具https://github.com/swagger-api/swagger-uiKibana分析和可視化平臺…

SO_REUSEPORT 之 TCP負載均衡驗證

首先啟動兩個tcp server&#xff0c; 代碼里開啟 SO_REUSEPORT [my_testlocalhost test]$ ./tcp_server_reuseport & [1] 1864 [my_testlocalhost test]$ Server listening on port 8888[my_testlocalhost test]$ ./tcp_server_reuseport & [2] 1865 [my_testlocalh…

網絡工程師備考1——基礎學習

認識設備 1 交換機 一、什么是交換機&#xff1f; 實現不同電腦之間數據的轉發 換機是一種用于電(光)信號轉發的網絡設備。 它可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。最常見的交換機是以太網交換機。交換機工作于OSI參考模型的第二層&#xff0c;即數據…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目錄 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息訂閱&#xff08;2.2&#xff09;JavaScript 消息訂閱 &#xff08;三&#xff09;Storage&#xff08;存儲&#xff09;&…

Linux:Ubuntu修改root密碼

Linux&#xff1a;Ubuntu修改root密碼 修改默認grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改內容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注釋這一行 GRUB_TIMEOUT5 # 將這一行的時間改為5秒進行開啟啟動的grub文件的復寫 rootshanxin:~…

芯課堂 | UI Creator 物理鍵盤移植指南

LVGL提供輸入設備的種類一共有5種&#xff0c;分別是&#xff1a;touchpad&#xff08;觸摸板&#xff09;、mouse&#xff08;鼠標&#xff09;、keypad&#xff08;鍵盤&#xff09;、encoder&#xff08;編碼器&#xff09;、button&#xff08;外部按鍵&#xff09;。而基于…

Tron 節點 性能壓測

文章目錄 一、代碼說明1.1 主要功能1.2 代碼示例1.3 代碼解釋1.4 執行流程 二、結果分析三、參數解釋3.1 numWorkers 和 numRequests 說明3.2 使用場景 四、注意事項 最近搭建了一個TRON節點&#xff0c;同事不相信我的自建節點比官方更靠譜&#xff0c;咱們給他使用golang寫一…

如何成為一個專業的AI產品經理?

可以找專業的老師帶。 可以找專業的內容學。 可以多遇挫折并快速學習&#xff0c;屢敗屢戰&#xff0c;筆者本人從業AI十年有余&#xff0c;吃了不少苦&#xff0c;有過很多或成功或失敗的經歷。 成為一個專業的AI產品經理需要一系列專業知識和技能的積累&#xff0c;以及在…

axios - 簡 單 的 請 求 模 板

import {message } from ant-design-vue import axios from axios import {useUserStore } from @/store/modules/user import router from @/routerconst instance = axios.create({baseURL: http://192.168.110.171:5201,timeout: 5000, })* 請求攔截器 insta

切換Ubuntu開機的主題

要將Ubuntu系統的啟動畫面&#xff08;即開機時的顯示界面&#xff09;從Lubuntu切換回原生的Ubuntu界面&#xff0c;可以按照以下步驟操作&#xff1a; 1. 安裝原生Ubuntu的plymouth主題 首先&#xff0c;確保你已經安裝了原生Ubuntu的plymouth主題。打開終端并運行以下命令…

基于Matlab卷積神經網絡(CNN)人臉識別系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 人臉識別技術作為計算機視覺領域的一個重要分支&#xff0c;已經廣泛應用于安全監控、身份驗證…