您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python正則表達式模塊之re模塊怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python正則表達式模塊之re模塊怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
re模塊(正則表達)是Python中的重要組成部分,這里涉及到字符串的匹配,轉換,自定義格式化……等等,尤其是對于后面要學的Python爬蟲是經常用到的。這個模塊是Python自帶的,不需要pip下載,導入使用就行了。
之前我們學過了r原始字符串標識符,比如:r'123\n' 輸出結果就是123\n,是表示輸出原始字符串,里面的轉義符就當做普通的一個字符直接輸出就行了,這個也是一種正則表達方式。
print(r'hello\n123\t') #輸出結果:hello\n123\t
import re
語法格式:re.match(pat,string,flag=0)
用法:re.match('正則表達式’,'要匹配的字符串',flag= )
參數說明:
pat:是表示參與匹配的正則表達式
string:是表示要匹配的字符串
flag:是標志符,用于控制正則表達式的匹配方式(設置條件之類的)
函數說明:
這個函數是從開頭第一個字符開始匹配的,如果匹配成功的話就返回一個匹配對象,如果失敗就返回none。如果我們想要獲取到返回的對象就用group(num)函數來獲取,這個函數獲取的結果就是匹配成功的字符串,如果num為0的話,其實等效于group(),如果num為1的話就返回正則表達式第一個括號匹配成功的字符串,如果num為2的話就返回正則表達式第二個括號匹配成功的字符串
字符 | 功能 | 位置 |
. | 匹配任意一個字符(除了\n) | |
[ ] | 匹配[ ]中列舉的字符(可以是一個范圍) | |
\d | 匹配數字,0~9 | 可以寫在[ ]中 |
\D | 匹配非數字,除了數字以外都可以匹配成功 | 可以寫在[ ]中 |
\s | 匹配空白符,空格 ,Tab | 可以寫在[ ]中 |
\S | 匹配非空白符 | 可以寫在[ ]中 |
\w | 匹配0-9,a-z,A-Z,中文等等除了特殊符號以外的范圍 內的字符 | 可以寫在[ ]中 |
\W | 匹配非單詞子串,除了\w范圍 以內的都可以匹配 | 可以寫在[ ]中 |
示例
import re string='hello word!' pat=re.match('.',string) print(pat) print(pat.group()) #輸出結果:<re.Match object; span=(0, 1), match='h'> # h
其中第一個輸出的結果就是返回的對象,span=(0,1)是表示匹配范圍為字符串的第0位(區間是左閉右開),匹配成功的字符串match='h'
如果用group()去獲取對象字符串就直接輸出 h
示例1:
import re #單個匹配示例 #1.'.'號匹配 a='123hello你好' a1=re.match('..',a)#正則表達式有兩個..那么就匹配字符串a前兩個字符 print(a1,a1.group()) #輸出結果:<re.Match object; span=(0, 2), match='12'> 12 #2.'.'號匹配 b='garrymod555' b1=re.match('g..r',b) print(b1,b1.group()) #輸出結果:<re.Match object; span=(0, 4), match='garr'> garr #3.直接匹配:被匹配的字符串首字符要與正則表達式相同,大小寫一一對應 c='python歐尼醬' c1=re.match('p',c) print(c1,c1.group()) #輸出結果:<re.Match object; span=(0, 1), match='p'> p #4.利用[],枚舉匹配 d='Haolow' d1=re.match('[hH]',d) #這時候d 的開頭大小寫都可以匹配成功 print(d1,d1.group()) #輸出結果:<re.Match object; span=(0, 1), match='H'> H #利用[],枚舉匹配0~9范圍的數字 num='51997asd' num1=re.match('[0123456789]',num) print(num1,num1.group()) #輸出結果:<re.Match object; span=(0, 1), match='5'> 5 #5.利用[],范圍匹配 e='ikuncxk' e1=re.match('[a-z]',e) #[]內是表示a~z在字符范圍 print(e1,e1.group()) #輸出結果:<re.Match object; span=(0, 1), match='i'> i #6.利用[],匹配多個范圍 f='567hhh' f1=re.match('[2-68-9]',f) #這個是表示匹配2~6和8~9 范圍以內的數字(字母也是同樣的道理) print(f1,f1.group()) #輸出結果:<re.Match object; span=(0, 1), match='5'> 5 #7.利用\d,匹配數字(另外一個是\D,這里就不講了,正則表達式匹配添加是跟\d完全相反的) g='666985www' g1=re.match('\d',g) # print(g1,g1.group()) #輸出結果:<re.Match object; span=(0, 1), match='6'> 6 #8.利用\s,匹配空白符(跟上面一樣\S,是\s反過來的,用法一樣,不講) h=' 91呵呵' h2=re.match('\s',h) print(h2,h2.group()) #輸出結果:<re.Match object; span=(0, 1), match=' '> #9.利用\w,匹配0-9,a-z,A-Z,中文等等除了特色符號以外的范圍內的字符 i='天問1號' i1=re.match('\w',i) print(i1,i1.group()) #輸出結果:<re.Match object; span=(0, 4), match='天問1號'> 天問1號 #10.利用\W,匹配特殊字符(\w范圍以外的字符) k='@qq.com' k1=re.match('\W',k) print(k1,k1.group()) #輸出結果:<re.Match object; span=(0, 1), match='@'> @
示例2:(匹配失敗)
import re kun='hellosad' k=re.match('5',kun) print(k) #輸出結果:None
字符 | 功能/說明 | 位置 |
* | 匹配前一個字符,這個字符出現0次到無限次(可有可無) | 可以用在字符或者()之后 |
+ | 匹配前一個字符,這個字符必須出現一次以上(否則報錯)上限為無限 | 可以用在字符或者()之后 |
? | 匹配前一個字符,這個字符出現0次到1次 | 可以用在字符或者()之后 |
{m} | 匹配前?個字符出現m次 | 可以用在字符或者()之后 |
{m,n} | 匹配前?個字符出現從m到n次,若省略m,則匹配0到n次,若省略n,則匹配m到無限次;若省略m,這匹配m,這匹配0到n次 | 可以用在字符或者()之后 |
示例代碼:
import re # * 匹配多個字符 p='1112223haowww.com' #示例1 p1=re.match('[\d]*',p) print(p1.group()) #輸出結果:1112223 #示例2 p2=re.match('1*',p) print(p2.group()) #輸出結果:111 #示例3 p3=re.match('1t*',p) print(p3.group()) #不會報錯 #輸出結果:1 # + 匹配多個字符 q='aaa112python' #示例1 q1=re.match('[a-z]+',q) print(q1.group()) #輸出結果:aaa #示例2 q2=re.match('ai+',q) #print(q2.group()) #報錯 print(q2) #輸出結果:None # { }綜合使用 #示例1:匹配由大小寫字母以及數字組成的密碼 ret=re.match('[a-zA-Z0-9]{6}','321uyg88') #如果{}里面的數字大于8就會報錯,超過范圍了 print(ret.group()) #輸出結果:321uyg #示例2:匹配8~12為由小寫字母和數字組成的密碼 res=re.match('[a-z0-9]{8,12}','123520ikun') print(res.group())#輸出結果123520ikun
字符 | 功能 |
^ | 匹配字符串的開頭 |
$ | 匹配字符串的結尾 |
示例:
格式:
re.search('正則表達式','字符串')
說明:這個函數是從整個字符串去進行匹配的,跟re.match()不同,re.match()是從開頭去匹配,如果開頭不一樣就返回None,而re.search()是看字符串的全局,直到匹配到滿足正則表達式才返回匹配對象,如果整個字符串都沒有找到匹配對象才會返回None
示例:
import re r=re.search('wao','123waohhhq') print(r.group()) #輸出結果:wao s=re.search('q[0-9]?j','heheqq5jbye') print(s.group()) #輸出結果:q5j
格式:
re.findall('正則表達式','字符串')
說明:整個函數同樣也是從整個字符串來匹配,但是這個函數是吧整個字符串所以滿足正則表達式的子串以列表的形式返回(前面的函數都是返回一個對象,需要用group()函數來獲取對象的子串),而這個函數是直接返回一個含有全部子串的列表
示例:
import re ret=re.findall('\d+','123www555abc789') print(ret) #輸出結果:['123', '555', '789']
格式:
re.finditer('正則表達式','字符串')
說明:這個函數跟re.findall() 差不多,只是前者是返回一個迭代器(需要用循環去依次獲取里面的對象),而后者是返回一個列表
示例:
import re ret=re.finditer('\d+','Python999,C++555,Java666') print(ret) #輸出的是迭代器地址 for i in ret: print(i.group(),end=' ') #輸出結果:<callable_iterator object at 0x000001E35504B5E0> # 999 555 666
split()整個函數在之前的字符串操作初步講過,是一個切割函數Python學習------起步7(字符串的連接、刪除、修改、查詢與統計、類型判斷及字符串字母大小寫轉換)_Python歐尼醬的博客-CSDN博客
格式:
re.split(pat,string,times)
參數說明:
pat:是正則表達式
string:是字符串
times:是分割次數
功能作用:在整個字符串中,根據匹配成功的子串作為切割點,對字符串進行切割,然后返回一個列表類型
示例:
import re cut=re.split('\d','hello 1 my 2 friend') print(cut) #輸出結果:['hello ', ' my ', ' friend'] cut_1=re.split(r':| ','Jack say:"I can do this all day"') #r表示后面為原字符串 print(cut_1) #輸出結果:['Jack', 'say', '"I', 'can', 'do', 'this', 'all', 'day"']
格式:
re.sub(pat,repalc,string,count,flag)
參數:
pat:是表示正則表達式
replac:是要替換的字符串或者函數(必寫)
string:是匹配的字符串
count:是替換的最大次數,如果不寫就默認全部替換
flag:可選參數,標志符,用于控制正則表達式的匹配條件
功能說明:sub是substitute的縮寫,意思是取代,這個函數可以將匹配到的子串進行取代替換,然后返回一個字符串類型
import re kun=re.sub('\d[A-Z]','鶩','hello,4Baww5Kc8P') print(kun) #輸出結果:hello,鶩aww鶩c鶩 KUN=re.sub('\d[A-Z]','鶩','hello,4Baww5Kc8P',count=2) #這里設置了count的值為2 print(KUN) #輸出結果:hello,鶩aww鶩c8P
re.subn(pat,repalc,string,count,flag)
參數:
pat:是表示正則表達式
replac:是要替換的字符串或者函數(必寫)
string:是匹配的字符串
count:是替換的最大次數,如果不寫就默認全部替換
flag:可選參數,標志符,用于控制正則表達式的匹配條件
說明:這個函數的用法跟re.sub() 的用法是一樣的,只是返回值不一樣,這個函數的返回值是一個元組,格式:('返回的字符串','次數')
import re def rep(temp): temp='GBT' return temp su=re.subn('\d+',rep,'hao,w1q2d3') #不設置count,此時就是全部的替換次數 print(su) #輸出結果:('hao,wGBTqGBTdGBT', 3)
讀到這里,這篇“Python正則表達式模塊之re模塊怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。