先貼一篇很好的正規表示式博文:一.正規表示式的語法以及關於貪婪與懶惰匹配的博文:
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獲得分組資...