python 學習筆記十八 正則表達式

正則表達式簡介

  • 正則表達式(或RE)是一種小型的、高度專業化的編程語言,在python中內嵌在python中,並通過re模塊實現,正則表達式被編譯成一系列的字節碼,然後通過c編寫的匹配引擎執行。
  • 正則表達式就是描述字符串排列的一種規則,其主要用於字符串的匹配,經常用於找到某一類符合格式要求的數據;在python中我們經常用re模塊來實現正則表達式

正則表達式基礎

原子

原子是正則表達式最基本的組成單位,正則表達式至少包含一個一個原子,常見的原子有:

  • 普通字符
  • 非打印字符
  • 通用字符
  • 原子表

普通字符
普通字符如數字,字母,下劃線等都可以作爲原子,yes中含有三個原子:y、e、s

hello中含有he,所以匹配成功
在這裏插入圖片描述
非打印字符
非打印字符指的是字符串中用於格式控制的符號常見的有\n換行符,\t製表符

a中有換行,所以匹配成功
在這裏插入圖片描述
通用字符
通用字符:一個原子可以匹配一類字符,人們常用的
常見的通用字符及其意義

字符 意義
\w 匹配任意一個字母、數字或下劃線
\W 匹配除字母、數字和下劃線以外的任意一個字符
\d 匹配任意一個十進制數
\D 匹配除十進制數以外的任意一個字符
\s 匹配任意一個空白字符
\S 匹配除空白字符以外的任意一個字符

匹配a中含有wpython的部分
在這裏插入圖片描述
原子表
原子表用[]表示,使用原子表可以定義一組地位平等的原子,匹配的時候取原子表中任意一個原子進行匹配,如[abc]str可以匹配字符串‘astr’,‘bstr’,‘cstr’;[^]代表除原子表裏的均可以匹配,如 [^abc]str可以匹配[d-z]str,不能匹配
‘astr’,‘bstr’,‘cstr’

在這裏插入圖片描述

元字符

元字符:正則表達式中具有特殊含義的字符;元字符分爲任意匹配字符,邊界限制元字符,界定符,模式選擇符,模式單元等

任意匹配字符
任意匹配字符‘.’,可用於匹配一個除換行符以外的任意字符
在這裏插入圖片描述
邊界限制元字符

  • 用‘^‘匹配字符串的開始, ‘^abc‘表示可以匹配以abc開頭的字符串,其餘均不匹配
    在這裏插入圖片描述
  • 用’$‘匹配字符串的結束,‘abc$‘表示可以匹配以abc結尾的字符串,其餘均不匹配
    在這裏插入圖片描述

限定符

常見限定符及其含義

限定符 含義
* 匹配0次、1次或多次前面的原子
匹配0次、1次前面的原子
+ 匹配1次或多次前面的原子
{n} 前面的原子恰好出現n次
{n,} 前面的原子至少出現n次
{n,m} 前面的原子至少出現n次,至多出現m次
| 模式選擇符
() 模式單元符
  • *實例
    匹配任意次,可以是0次
    在這裏插入圖片描述

  • ?實例
    匹配0次或1次表示可以匹配不到
    在這裏插入圖片描述

  • +實例
    匹配一次或多次,不能是0次
    在這裏插入圖片描述

  • {n}實例
    {n}匹配前面原子恰好出現n次,其餘不匹配
    在這裏插入圖片描述

  • {n,}實例
    {n,}匹配前面原子出現次數大於等於n,小於n的無法匹配
    在這裏插入圖片描述

  • {n,m}實例
    匹配前面原子出現次數在[n,m]之間
    在這裏插入圖片描述
    模式選擇符
    模式選擇符’|'可以設置多個匹配模式,匹配時滿足任意一個都可以
    在這裏插入圖片描述
    模式單元符
    模式單元符‘()’,可以用()將原子組合成一個整體用於匹配,如(aa)表示把aa當做一個整體進行匹配,此時字符a是無法匹配的
    在這裏插入圖片描述

模式修正

在不修改正則表達式前提下,模式修正可以修正正則表達式的含義,從而調整匹配結果。

常見模式修正符及其含義

修正符 含義
I 匹配時忽略大小寫
X 匹配時忽略模式中的空白
S 將字符串看作單行,換行符看做普通字符
  • I 實例
    加I之後忽略字母的大小寫
    在這裏插入圖片描述
  • X 實例
    加x後忽略pattern中的空白
    在這裏插入圖片描述
  • S 實例
    加S後可以匹配換行符\n
    在這裏插入圖片描述

貪婪模式、懶惰模式

貪婪模式就是儘可能多的匹配,懶惰模式就是儘可能少的匹配。
常見的貪婪模式 .* 匹配任意多個任意字符,非貪婪就在貪婪模式中的*或+後面加?即可。

可以發現貪婪模式儘可能多的匹配結果,非貪婪模式則匹配到第一個結果後就直接返回結果
在這裏插入圖片描述

常用函數

re.match()

用於從源字符串的起始位置匹配一個模式,如果匹配成功則返回匹配的結果,否則返回None,匹配成功後可以使用.span()返回在源字符串中的位置

re.match(pattern,string,flag)

  • pattern:匹配的表達式
  • string:源字符串
  • flag:標誌位,可以填寫模式修正符

該方法的侷限性是隻能從起始位置開始匹配
在這裏插入圖片描述

re.search()

用於匹配源字符串是否含有與模式相同的子串,如果匹配成功則返回匹配的結果,否則返回None,匹配成功後可以使用.span()返回在源字符串中的位置

re.search(pattern,string,flag)

  • pattern:匹配的表達式
  • string:源字符串
  • flag:標誌位,可以填寫模式修正符

該方法可以匹配整個字符串,但只會返回第一次出現的位置
在這裏插入圖片描述

全局匹配函數

re.complie()對正則表達式進行預編譯,完成後使用findall()找出所有匹配結果
在這裏插入圖片描述

re.sub()

根據正則表達式來實現替換某些字符串
re.sub(pattern,rep,string,max)

  • pattern:正則表達式
  • rep:替換後留下的字符串
  • string:用於被替換的字符串
  • max:最多替換的次數,不填就會全部替換
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章