Python正則表達(dá)式語法及re模塊中的常用函數(shù)詳解
概念、作用和步驟
概念: 本身也是一個(gè)字符串,其中的字符具有特殊含義,將來我們可以根據(jù)這個(gè)字符串【正則表達(dá)式】去處理其他的字符串,比如可以對(duì)其他字符串進(jìn)行匹配,切分,查找,替換等一系列操作。
作用:可以對(duì)其他字符串進(jìn)行匹配,切分,查找,替換等處理操作。
編寫的步驟:- 需要大量的文本信息——找規(guī)律——使用正則語法編寫出正則表達(dá)式
是一個(gè)獨(dú)立于任何一門語言的技術(shù),任何一門語言中都可以使用同一個(gè)正則表達(dá)式去操作
語法
需要先導(dǎo)入內(nèi)置函數(shù)re,import re
- 字符串本身就是一個(gè)正則表達(dá)式
- [] 表示可選項(xiàng)
代碼展示:
import re s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)快遞能找到' r1 = re.findall(r'\d+[16]',s1) print(r1,type(r1))
運(yùn)行結(jié)果:

- 英文字母范圍
- [a-z] 表示查找 a-z
- [A-Za-z]
- [0-9]
注意[]需要用’ '括起才能使用,否則報(bào)錯(cuò)
[**A-Za-z]不能改變?nèi)鏪A-z]因?yàn)槭褂玫氖茿SCII碼,會(huì)出現(xiàn)非英文部分。
代碼展示:
s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)ABC快遞能找到' r1 = re.findall(r'[f-z]',s1) r2 = re.findall(r'[A-Za-z]',s1) r3 = re.findall(r'[3-9]',s1) print(r1) print(r2) print(r3)
運(yùn)行結(jié)果:

- \d 數(shù)字
- **\d?**表示出現(xiàn)了0次或者1次
- \d+ 表示出現(xiàn)了1次或者n次
- \d*表示出現(xiàn)了0次或者n次
\d同時(shí)需’'括起使用
代碼展示:
s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)ABC快遞能找到' r1 = re.findall(r'\d',s1) r4 = re.findall(r'\d?',s1) r2 = re.findall(r'\d+',s1) r3 = re.findall(r'\d*',s1) print(r1) print(r4) print(r2) print(r3)
運(yùn)行結(jié)果:

- {}出現(xiàn)次數(shù)
- {m,n} 表示出現(xiàn)的次數(shù)范圍,m表示至少出現(xiàn)的次數(shù),n表述最多出現(xiàn)的次數(shù)
- {m,} 表示出現(xiàn)的次數(shù),至少為m個(gè),上不封頂
- {m} 表示出現(xiàn)了m次
代碼展示:
s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,微信是微信2342345,qq是qq1234,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)ABC快遞能找到'
r1 = re.findall(r'1\d{1,2}',s1)
r2 = re.findall(r'是\d{,2}',s1)
r4 = re.findall(r'1\d{3,}',s1)
r3 = re.findall(r'\d{2}',s1)
print(r1)
print(r2)
print(r4)
print(r3)
運(yùn)行結(jié)果:

- \w 表示英文字母大寫或者小寫,或者下劃線,或者是中文漢字
- \W 表示除了大小寫英文字母,數(shù)字,漢字,下劃線之外,都能匹配
如果我們沒有寫re.ASCII參數(shù),那么第一個(gè)\w+會(huì)將漢字也匹配上,因?yàn)閈w本身就可以匹配漢字的,但是當(dāng)我們加上了re.ASCII參數(shù),python正則表達(dá)式匹配的時(shí)候,\w只會(huì)匹配ASCII碼上有的字符。
代碼展示:
s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,微信是微信2342345,qq是qq1234,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)ABC快遞能找到' r1 = re.findall(r'\W',s1) r2 = re.findall(r'qq\w+',s1) r3 = re.findall(r'qq\w+',s1,re.ASCII) print(r1) print(r2) print(r3)
運(yùn)行結(jié)果:

匹配以某個(gè)字符串開頭
- ^ 表示以某個(gè)字符串開頭
.com在re里可寫成\.com
代碼展示:
s1 = '今天是個(gè)好天氣,我的快遞1-67,12-21343,ert_134找不到了,手機(jī)號(hào)碼是12345685769,微信是wx2342345,qq是qq1234,郵箱是12345678@qq.com和12134.163.com。希望我的三個(gè)ABC快遞能找到' r1 = re.findall(r'qq\w+',s1,re.ASCII) r2 = re.findall(r'12\w+\@\w+\.com',s1,re.ASCII) s2 = '123ajdhsa2134' s3 = 'ajdhsa$2134$' r3 = re.findall(r'^aj',s2,re.ASCII) r4 = re.findall(r'^aj',s3,re.ASCII) print(r1) print(r2) print(r3) print(r4)
運(yùn)行結(jié)果:

- () 分組
可以
多個(gè)()進(jìn)行分組,,結(jié)果按()順序
代碼展示:
s1 = '身份證號(hào):342300200105198866'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1,re.ASCII)
print(r1)
for i in r1:
print(i)
運(yùn)行結(jié)果:

- 或 | 多個(gè)字符之間的或使用小括號(hào)
代碼展示:
s1 = '身份證號(hào)1:342300200105198866,另一個(gè)身份證號(hào)2:342200200806116688'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1)
r2 = re.findall(r'(342(300|200)(\d{4})(\d{2})(\d{2}))',s1)
print(r1)
print(r2)
運(yùn)行結(jié)果:

- . 表示任意字符
使用\轉(zhuǎn)義字符,將.變成普通的點(diǎn)字符進(jìn)行匹配
代碼展示:
s1 = '今天天氣正好,適合買xiaomipro,郵箱是12345678@qq.com'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.findall(r'天氣.{5}',s1)
r3 = re.findall(r'12\d+@+\w+\.com',s1)
print(r1)
print(r2)
print(r3)
運(yùn)行結(jié)果:

re模塊中的常用函數(shù)
- re.findall 在大字符串中查找符合正則表達(dá)式特點(diǎn)的式子
- re.match() 匹配整個(gè)字符串是否符合某個(gè)正則表達(dá)式特點(diǎn)
- re.search() 從左向右匹配正則表達(dá)式,只會(huì)匹配一次符合條件, 得到的是一個(gè)對(duì)象
match和search返回的是對(duì)象,需要group查看
代碼展示:
s1 = '今天天氣正好,適合買xiaomipro,郵箱是12345678@qq.com'
s2 = 'xiaom'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.match(r'xiao',s2)
r3 = re.match(r'xiao',s1)
r4 = re.search(r'xiao',s2)
print(r1)
print(r2)
print(r2.group())
print(r3)
print(r4)
print(r4.group())
運(yùn)行結(jié)果:
- re.split()切割
代碼展示:
s1 = 'xiaomi.pro@12345' r1 = re.split(r'[.,@]',s1) print(r1)
運(yùn)行結(jié)果:

- re.finditer() 在大字符串中查找符合正則表達(dá)式特點(diǎn)的式子,得到的是一個(gè)迭代器
代碼展示:
s1 = 'xiaomi.pro@12345'
r1 = re.finditer(r'[(\d+)]',s1,re.ASCII)
for i in r1:
print(i.group())
print(r1)
運(yùn)行結(jié)果:

- fullmatch() 將字符串整體與正則表達(dá)式進(jìn)行匹配
代碼展示:
text = '安徽省-合肥市'
res1 = re.fullmatch(f'(\w+)-(\w+)', text)
print(f"省份:{res1.group(1)}")
print(f"市:{res1.group(2)}")
運(yùn)行結(jié)果:

總結(jié)
到此這篇關(guān)于Python正則表達(dá)式語法及re模塊中的常用函數(shù)的文章就介紹到這了,更多相關(guān)Python正則及re模塊函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python串口如何讀取byte類型數(shù)據(jù)并訪問
這篇文章主要介紹了python串口如何讀取byte類型數(shù)據(jù)并訪問方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子
今天小編就為大家分享一篇python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
關(guān)于Python內(nèi)存分配時(shí)的小秘密分享
這篇文章主要給大家分享介紹了關(guān)于Python內(nèi)存分配時(shí)的小秘密,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Django之 ArrayAgg與Admin技巧學(xué)習(xí)
這篇文章主要為大家介紹了Django之ArrayAgg與Admin的技巧學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Python實(shí)現(xiàn)猜數(shù)字小游戲
這篇文章介紹了Python實(shí)現(xiàn)猜數(shù)字小游戲,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以收藏下,方便下次瀏覽觀看2021-12-12
解決Vscode中jupyter出現(xiàn)kernel dead問題
遇到VSCode中Jupyter Kernel Dead時(shí),可通過Anaconda Prompt安裝ipykernel解決,首先使用jupyter kernelspec list命令查看內(nèi)核,若發(fā)現(xiàn)缺少ipykernel,激活相應(yīng)虛擬環(huán)境,使用conda install ipykernel命令安裝,操作后,VSCode中Jupyter應(yīng)能正常運(yùn)行2024-09-09

