本地網(wǎng)站建設(shè)荊門(mén)網(wǎng)站seo
目錄
一、正則表達(dá)式
二、正則表達(dá)式的三個(gè)基礎(chǔ)方法
1.match 從頭匹配
2.search(匹配規(guī)則,被匹配字符串)
3.findall(匹配規(guī)則,被匹配字符串)
三、元字符匹配
單字符匹配:
注:
示例:
找出特殊字符
找出全部的英文字母
找出單詞字符?
數(shù)量匹配:
邊界匹配
分組匹配
案例
注:
我們終將上岸,陽(yáng)光萬(wàn)里
????????????????????????????????—— 24.11.15
一、正則表達(dá)式
正則表達(dá)式,又稱規(guī)則表達(dá)式(Regular Expression),是使用單個(gè)字符串來(lái)描述、匹配某個(gè)句法規(guī)則的字符串,常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。
簡(jiǎn)單來(lái)說(shuō),正則表達(dá)式就是使用:字符串定義規(guī)則,并通過(guò)規(guī)則去驗(yàn)證字符串是否匹配
比如,驗(yàn)證一個(gè)字符串是否是符合條件的電子郵箱地址,只需要配置好正則規(guī)則,即可匹配任意郵箱。比如通過(guò)正則規(guī)則:(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$),即可匹配一個(gè)字符串是否是標(biāo)準(zhǔn)郵箱格式
但如果不使用正則,使用if else來(lái)對(duì)字符串做判斷就非常困難了:
二、正則表達(dá)式的三個(gè)基礎(chǔ)方法
Python正則表達(dá)式,使用re模塊,并基于re模塊中三個(gè)基礎(chǔ)方法來(lái)做正則匹配。
分別是:match、search、findall三個(gè)基礎(chǔ)方法
re.match(匹配規(guī)則,被匹配字符,串)
從被匹配字符串開(kāi)頭進(jìn)行匹配,匹配成功返回匹配對(duì)象(包含匹配的信息),匹配不成功返回空
1.match 從頭匹配
import res = "一切都會(huì)好的"# match 從頭匹配
res1 = re.match("一切", s)
print(res1)
2.search(匹配規(guī)則,被匹配字符串)
搜索整個(gè)字符串,找出匹配的。從前向后,找到第一個(gè)后,就停止,不會(huì)繼續(xù)向后
import res = "一切都會(huì)好的"# search 從頭到尾進(jìn)行搜索
res2 = re.search("都會(huì)好", s)
print(res2)
3.findall(匹配規(guī)則,被匹配字符串)
匹配整個(gè)字符串,找出全部匹配項(xiàng)
找不到返回空l(shuí)ist:[]
import re# findall 找出全部匹配項(xiàng)
s = "一切都會(huì)好的,我一直相信"
res3 = re.findall("一", s)
print(res3)
三、元字符匹配
在剛剛我們只是進(jìn)行了基礎(chǔ)的字符串匹配,正則最強(qiáng)大的功能在于元字符匹配規(guī)則。
單字符匹配:
注:
字符串前面帶上r的標(biāo)記,表示字符串中轉(zhuǎn)義字符無(wú)效,就是普通字符的意思?
示例:
字符串 s = "一切都會(huì)好的_021104_我一直相信_(tái)YYSHlcl"
找出特殊字符
import res = "一切都會(huì)好的_@021104_我一直相信_(tái)@YYSHlcl"res1 = re.findall("\W",s)
print(res1)
找出全部的英文字母
import res = "一切都會(huì)好的_@021104_我一直相信_(tái)@YYSHlcl"# 字符串前面帶上r的標(biāo)記,表示字符串中轉(zhuǎn)義字符無(wú)效,就是普通字符的意思
# 找出所有英文字符
res2 = re.findall(r"[a-zA-Z]",s)
print(res2)
找出單詞字符?
import res = "一切都會(huì)好的_@021104_我一直相信_(tái)@YYSHlcl"# 字符串前面帶上r的標(biāo)記,表示字符串中轉(zhuǎn)義字符無(wú)效,就是普通字符的意思
# 找出所有的單詞字符
res3 = re.findall(r"\w",s)
print(res3)
數(shù)量匹配:
邊界匹配
分組匹配
案例
匹配賬號(hào),只能由字母和數(shù)字組成,長(zhǎng)度限制6到10位
規(guī)則為:^[0-9a-zA-Z]{6,10}$
匹配QQ號(hào),要求純數(shù)字,長(zhǎng)度5-11,第一位不為0
規(guī)則為:^[1-9][0-9]{4,10}&
[1-9]匹配第一位,[0-9]匹配后面4到10位
匹配郵箱地址,只允許qq、163、gmail這三種郵箱地址
規(guī)則為:^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+&
注:
字符串的 r 標(biāo)記表示,字符串內(nèi)轉(zhuǎn)義字符無(wú)效,作為普通字符使用
import re
# 匹配賬號(hào),只能由字母和數(shù)字組成,長(zhǎng)度限制6到10位
# 規(guī)則為:^[0-9a-zA-Z]{6,10}$
res1 = re.findall(r"^[0-9a-zA-Z]{6,10}$","954926928lcl")
print("res1:", res1)res2 = re.findall(r"^[0-9a-zA-Z]{6,10}$","954926928")
print("res2:", res2)# 匹配00號(hào),要求純數(shù)字,長(zhǎng)度5-11,第一位不為0
# 規(guī)則為:^[1-9][0-9]{4,10}&
# [1-9]匹配第一位,[0-9]匹配后面4到10位
res3 = re.findall(r"^[1-9][0-9]{4,10}$","2952234004")
print("res3:", res3)# 匹配郵箱地址,只允許qq、163、gmail這三種郵箱地址
# 規(guī)則為:^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+&
res4 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","lcl@163.com")
print("res4:", res4)res5 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","2952234004@qq.com")
print("res5:", res5)res6 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","1144099341@gmail.com")
print("res6:", res6)# 正則表達(dá)式中若有括號(hào)分組,則需要在正則表達(dá)式中加括號(hào)使正則表達(dá)式整體變?yōu)橐粋€(gè)組
# match方法可以只輸出完整的組
res7 = re.match(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","1144099341@gmail.com")
print("res7:",res7)