Python正則表達(dá)式語法及re模塊中的常用函數(shù)詳解
概念、作用和步驟
概念: 本身也是一個(gè)字符串,其中的字符具有特殊含義,將來我們可以根據(jù)這個(gè)字符串【正則表達(dá)式】去處理其他的字符串,比如可以對其他字符串進(jìn)行匹配,切分,查找,替換等一系列操作。
作用:可以對其他字符串進(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ī)號碼是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ī)號碼是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ī)號碼是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ī)號碼是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ī)號碼是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ī)號碼是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 = '身份證號: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è)字符之間的或使用小括號
代碼展示:
s1 = '身份證號1:342300200105198866,另一個(gè)身份證號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è)對象
match和search返回的是對象,需要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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyCharm提示No Python Interpreter的正確解決辦法
剛學(xué)Python時(shí),拿到一個(gè)Python項(xiàng)目,想用pycharm打開運(yùn)行卻報(bào)錯(cuò)了,這篇文章主要給大家介紹了關(guān)于PyCharm提示No Python Interpreter的正確解決辦法,需要的朋友可以參考下2023-10-10
Python趣味挑戰(zhàn)之pygame實(shí)現(xiàn)無敵好看的百葉窗動(dòng)態(tài)效果
最近寫了很多期關(guān)于pygame的案例和知識(shí)點(diǎn),自己也收獲了很多知識(shí),也在這個(gè)過程中成長了不少, 這次還是圍繞surface對象進(jìn)行詳細(xì)介紹,并形成完整的案例過程,文中有非常詳細(xì)實(shí)現(xiàn)百葉窗動(dòng)態(tài)效果的代碼示例,需要的朋友可以參考下2021-05-05
Python自動(dòng)刪除過期文件的實(shí)現(xiàn)方法
你是否感到你的電腦越用越卡,啟動(dòng)程序慢,打開文件也慢?罪魁禍?zhǔn)卓赡芫褪悄切┎恢挥X中文件堆積如山的文件夾!下載的電影、瀏覽網(wǎng)頁產(chǎn)生的臨時(shí)文件、舊的程序日志、一次性使用的文檔,本文我們將手把手教你如何打造一套Python自動(dòng)刪除過期文件的智能系統(tǒng)2025-11-11
Numpy 多維數(shù)據(jù)數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了Numpy 多維數(shù)據(jù)數(shù)組的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python還能這么玩之只用30行代碼從excel提取個(gè)人值班表
公司實(shí)行項(xiàng)目值班制度,拿到值班表,看到全部的值班信息,要去查找自己的值班信息,是一件頭痛的事情.作為程序員,當(dāng)然要簡化,將自己的信息提煉出來,需要的朋友可以參考下2021-06-06

