關于Python正則表達式模塊之re模塊
前言:
re模塊(正則表達)是Python中的重要組成部分,這里涉及到字符串的匹配,轉換,自定義格式化……等等,尤其是對于后面要學的Python爬蟲是經(jīng)常用到的。這個模塊是Python自帶的,不需要pip下載,導入使用就行了。
之前我們學過了r原始字符串標識符,比如:r'123\n' 輸出結果就是123\n,是表示輸出原始字符串,里面的轉義符就當做普通的一個字符直接輸出就行了,這個也是一種正則表達方式。
print(r'hello\n123\t') #輸出結果:hello\n123\t
導入模塊
import re
1.re.match() 函數(shù)
語法格式:re.match(pat,string,flag=0)
用法:re.match('正則表達式’,'要匹配的字符串',flag= )
參數(shù)說明:
pat:是表示參與匹配的正則表達式
string:是表示要匹配的字符串
flag:是標志符,用于控制正則表達式的匹配方式(設置條件之類的)
函數(shù)說明:
這個函數(shù)是從開頭第一個字符開始匹配的,如果匹配成功的話就返回一個匹配對象,如果失敗就返回none。如果我們想要獲取到返回的對象就用group(num)函數(shù)來獲取,這個函數(shù)獲取的結果就是匹配成功的字符串,如果num為0的話,其實等效于group(),如果num為1的話就返回正則表達式第一個括號匹配成功的字符串,如果num為2的話就返回正則表達式第二個括號匹配成功的字符串
(1)匹配單個字符
| 字符 | 功能 | 位置 |
| . | 匹配任意一個字符(除了\n) | |
| [ ] | 匹配[ ]中列舉的字符(可以是一個范圍) | |
| \d | 匹配數(shù)字,0~9 | 可以寫在[ ]中 |
| \D | 匹配非數(shù)字,除了數(shù)字以外都可以匹配成功 | 可以寫在[ ]中 |
| \s | 匹配空白符,空格 ,Tab | 可以寫在[ ]中 |
| \S | 匹配非空白符 | 可以寫在[ ]中 |
| \w | 匹配0-9,a-z,A-Z,中文等等除了特殊符號以外的范圍 內(nèi)的字符 | 可以寫在[ ]中 |
| \W | 匹配非單詞子串,除了\w范圍 以內(nèi)的都可以匹配 | 可以寫在[ ]中 |
示例
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位(區(qū)間是左閉右開),匹配成功的字符串match='h'
如果用group()去獲取對象字符串就直接輸出 h
示例1:
import re
#單個匹配示例
#1.'.'號匹配
a='123hello你好'
a1=re.match('..',a)#正則表達式有兩個..那么就匹配字符串a(chǎn)前兩個字符
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范圍的數(shù)字
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) #[]內(nèi)是表示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 范圍以內(nèi)的數(shù)字(字母也是同樣的道理)
print(f1,f1.group())
#輸出結果:<re.Match object; span=(0, 1), match='5'> 5
#7.利用\d,匹配數(shù)字(另外一個是\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呵呵'
h1=re.match('\s',h)
print(h1,h1.group())
#輸出結果:<re.Match object; span=(0, 1), match=' '>
#9.利用\w,匹配0-9,a-z,A-Z,中文等等除了特色符號以外的范圍內(nèi)的字符
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(2)匹配多個字符 字符功能/說明位置*
| 字符 | 功能/說明 | 位置 |
| * | 匹配前一個字符,這個字符出現(xiàn)0次到無限次(可有可無) | 可以用在字符或者()之后 |
| + | 匹配前一個字符,這個字符必須出現(xiàn)一次以上(否則報錯)上限為無限 | 可以用在字符或者()之后 |
| ? | 匹配前一個字符,這個字符出現(xiàn)0次到1次 | 可以用在字符或者()之后 |
| {m} | 匹配前?個字符出現(xiàn)m次 | 可以用在字符或者()之后 |
| {m,n} | 匹配前?個字符出現(xià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:匹配由大小寫字母以及數(shù)字組成的密碼
ret=re.match('[a-zA-Z0-9]{6}','321uyg88') #如果{}里面的數(shù)字大于8就會報錯,超過范圍了
print(ret.group()) #輸出結果:321uyg
#示例2:匹配8~12為由小寫字母和數(shù)字組成的密碼
res=re.match('[a-z0-9]{8,12}','123520ikun')
print(res.group())#輸出結果123520ikun(3) 匹配開頭和結尾
| 字符 | 功能 |
| ^ | 匹配字符串的開頭 |
| $ | 匹配字符串的結尾 |
示例:

2.re.search() 函數(shù)
格式:
re.search('正則表達式','字符串')
說明:這個函數(shù)是從整個字符串去進行匹配的,跟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())
#輸出結果:q5j3.re.findall() 函數(shù)
格式:
re.findall('正則表達式','字符串')
說明:整個函數(shù)同樣也是從整個字符串來匹配,但是這個函數(shù)是吧整個字符串所以滿足正則表達式的子串以列表的形式返回(前面的函數(shù)都是返回一個對象,需要用group()函數(shù)來獲取對象的子串),而這個函數(shù)是直接返回一個含有全部子串的列表
示例:
import re
ret=re.findall('\d+','123www555abc789')
print(ret)
#輸出結果:['123', '555', '789']4.re.finditer() 函數(shù)
格式:
re.finditer('正則表達式','字符串')
說明:這個函數(shù)跟re.findall() 差不多,只是前者是返回一個迭代器(需要用循環(huán)去依次獲取里面的對象),而后者是返回一個列表
示例:
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 5.re.split() 函數(shù)
split()整個函數(shù)在之前的字符串操作初步講過,是一個切割函數(shù)Python學習------起步7(字符串的連接、刪除、修改、查詢與統(tǒng)計、類型判斷及字符串字母大小寫轉換)_Python歐尼醬的博客-CSDN博客
格式:
re.split(pat,string,times)
參數(shù)說明:
pat:是正則表達式
string:是字符串
times:是分割次數(shù)
功能作用:在整個字符串中,根據(jù)匹配成功的子串作為切割點,對字符串進行切割,然后返回一個列表類型
示例:
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"']6.re.sub() 函數(shù)
格式:
re.sub(pat,repalc,string,count,flag)
參數(shù):
pat:是表示正則表達式
replac:是要替換的字符串或者函數(shù)(必寫)
string:是匹配的字符串
count:是替換的最大次數(shù),如果不寫就默認全部替換
flag:可選參數(shù),標志符,用于控制正則表達式的匹配條件
功能說明:sub是substitute的縮寫,意思是取代,這個函數(shù)可以將匹配到的子串進行取代替換,然后返回一個字符串類型
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鶩c8P7.re.subn() 函數(shù)
re.subn(pat,repalc,string,count,flag)
參數(shù):
pat:是表示正則表達式
replac:是要替換的字符串或者函數(shù)(必寫)
string:是匹配的字符串
count:是替換的最大次數(shù),如果不寫就默認全部替換
flag:可選參數(shù),標志符,用于控制正則表達式的匹配條件
說明:這個函數(shù)的用法跟re.sub() 的用法是一樣的,只是返回值不一樣,這個函數(shù)的返回值是一個元組,格式:('返回的字符串','次數(shù)')
import re
def rep(temp):
temp='GBT'
return temp
su=re.subn('\d+',rep,'hao,w1q2d3') #不設置count,此時就是全部的替換次數(shù)
print(su)
#輸出結果:('hao,wGBTqGBTdGBT', 3)到此這篇關于關于Python正則表達式模塊之re模塊的文章就介紹到這了,更多相關Python正則表達式 re模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用python tkinter開發(fā)一個爬取B站直播彈幕工具的實現(xiàn)代碼
這篇文章主要介紹了使用python tkinter開發(fā)一個爬取B站直播彈幕的工具,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
pandas.DataFrame.drop_duplicates 用法介紹
這篇文章主要介紹了pandas.DataFrame.drop_duplicates 用法介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
django mysql數(shù)據(jù)庫及圖片上傳接口詳解
這篇文章主要介紹了django mysql數(shù)據(jù)庫及圖片上傳接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
python中dir()與__dict__屬性的區(qū)別淺析
這篇文章主要給大家介紹了關于python中dir()與__dict__屬性的區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12

