Python的Re庫詳解(正規表示式)

2021-09-22 02:19:56 字數 3168 閱讀 8362

先貼一篇很好的正規表示式博文:

以及關於貪婪與懶惰匹配的博文:

一.正規表示式的語法

1.正規表示式語法由字元和操作符構成。

2.正規表示式的常用操作符:

(1).             表示任何單個字元

(2)[ ]           字符集,對單個字元給出取值範圍

(3)[^]          非字符集,對單個字元給出排除範圍

(4)*            其哪乙個字元0次或無限次擴充套件

(5)+           前乙個字元1次或無限次擴充套件

(6)?         前乙個字元0次或1次擴充套件

(7)|            左右表示式任意乙個

(8)        擴充套件前乙個字元m次(只對大括號前的乙個字元進行擴充套件)

(9)     擴充套件前乙個字元m至n次(含n)

(10)^          匹配字串的開頭          例:^abc表示abc且在乙個字串的開頭

(11)$         匹配字串結尾             例:abc$表示abc且在乙個字串結尾

(12)( )        分組標記,內部只能使用|操作符           例:(abc|def)表示abc,def

(13)\d         數字,等價於[0-9]

(14)\w        單詞字元,等價於[a-za-z0-9_]

二.re庫的基本使用

1.呼叫方式:import re

2.正規表示式的表示型別:

(1)raw string型別(原生字串型別)

re庫採用raw string型別表示正規表示式,表示為:r'text',raw string是不包含轉義符的字串

(2)string型別,更繁瑣

3.當正規表示式包含轉義符時,使用raw string

4.re庫主要功能函式:

(1)re.search():在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件

(2)re.match():從乙個字串的開始位置匹配正規表示式,返回match物件

(3)re.findall():搜尋字串,以列表型別返回全部能匹配的子串

(4)re.split():將乙個字串按照正規表示式匹配結果進行分割,返回列表型別

(5)re.finditer:搜尋字串,返回乙個匹配結果的迭代型別,每個迭代元素時match物件

(6)re.sub:在乙個字串中替換所有匹配字串的子串,返回替換後的字串

5.re庫的另一種等價用法:

(1)函式式用法:一次性操作

例:rst = re.search(......)

(2)物件導向用法:編譯後的多次操作

pat = re.compile(r'[1-9]\d')              #將乙個正規表示式字串變異成為正規表示式型別,python物件)

rst = pat.search('bit 100081')            #用python物件呼叫search方法

6.正規表示式物件:

regex = re.compile(pattern, flags=0)          compile函式將正規表示式的字串編譯成正規表示式物件

三.re主要功能函式詳解

1.re.search(pattern, string, flags=0)

(1)pattern:正規表示式的字串或原生字元穿表示

(2)string:帶匹配的字串

(3)flags:正規表示式使用時的控制標記

re.i:忽略正規表示式大小寫,[a-z]能匹配小寫字元

re.m:正規表示式中的^操作符能夠將給定字串的每行當作匹配開始(本來^操作符只匹配字串的串首,使用re.m後可以匹配字串每行的行首

re.s:正規表示式的.操作符能夠匹配所有字元,預設匹配除換行符外的所有字元(設定re.s,可以匹配換行符)

2.re.match(pattern, string, flags=0)

3.re.findall(pattern, string, flags=0)

4.re.split(pattern, string, maxsplit=0, flags=0)

(1)maxsplit:最大分割數,剩餘部分作為最後乙個元素輸出

5.re.finditer(pattern, string, flags=0)

6.re.sub(pattern, repl, string, count=0, flags=0)

(1)repl:替換匹配字串的字串

(2)count:匹配的最大替換次數

四.re庫的match物件

1.match物件的屬性:

(1).string     帶匹配的文字

(2).re          匹配時使用的pattern物件(正規表示式)

(3).pos       正規表示式搜尋文字的開始位置

(4).endpos 正規表示式搜尋文字的結束位置

2.match物件的方法

(1).group(0):獲得匹配後的字串

(2).start():匹配字串在原始字串的開始位置

(3).end():匹配字串在原始字串的結束位置

(4).span():返回(.start(), .end())

五.re庫的貪婪匹配和最小匹配

1.re庫預設採用貪婪匹配,即輸出匹配最長的子串

例:match = re.search(r'py.*n', 'pyanbn***n')

match.group(0)

結果:pyanbn***n

分析:實際上在該原始字串中,pyan,pyanbn,pyanbncn,pyanbn***n,都滿足正規表示式,但結果輸出了其中最長的pyanbn***n,這就叫貪婪匹配.

2.最小匹配:輸出最短的字串(在正規表示式中加乙個?)

例;match = re.search(r'py.*?n', 'pyanbn***n')

match.group(0)

結果為:pyan

3.最小匹配操作符:

(1)*?:前乙個字元0次或無限次擴充套件,最小匹配

(2)+?:前乙個字元1次或無限次擴充套件,最小匹配

(3)??:前乙個字元0次或1次擴充套件,最小匹配

(4):擴充套件前乙個字元m至n次(含n),最小匹配

python爬蟲 re庫(正則)

1.re.match re.match嘗試從字元創的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,就會返回none。re.match pattern,string,flags 0 2.最常規的匹配 import re content hello 123 4567 world this is a...

Python程式設計 re正則庫基本使用

之前的文章 python程式設計 re正則庫 字符集 w 匹配字母數字及下劃線 w 匹配非字母數字及下劃線 s 匹配任意空白字元,等價於 n t r f s 匹配任意非空字元 d 匹配任意數字,等價於 0 9 d 匹配任意非數字 a 匹配字串開始 z 匹配字串結束,如果是換行,只匹配到換行前的結束字...

python正則re使用

1 import re 將正規表示式編譯成pattern物件 pattern re.compile r hello re.i 使用pattern匹配文字,獲得匹配結果,無法匹配時將返回none match pattern.match hello world if match 使用match獲得分組資...