part 1 正則表達(dá)式
正則表達(dá)式:用來做字符串查找善绎、匹配诫尽、切割的一種工具。
Python對正則表達(dá)式的支持,提供re模塊(Python內(nèi)置的模塊)
包含字符串匹配驹止,查找,切割的相關(guān)的方法
fullmatch(正則表達(dá)式衣洁,字符串):用正則表達(dá)式和字符串進(jìn)行
匹配坊夫,看能否成功匹配撤卢。
正則表達(dá)式:是一個符合正則規(guī)范的字符串
import re
#正則表達(dá)式的字符串前面要加r阻止轉(zhuǎn)義,
# 因?yàn)檎齽t表達(dá)式的符號中有很多帶轉(zhuǎn)義符號智听,
# 其功能不是轉(zhuǎn)義到推,而是表示特殊的意義惕澎。
#1. .:匹配一個任意字符
re_str = '.'
re.fullmatch(re_str, 'a')
#2.匹配第一個字符是a第二個字符是b
re_str = 'ab'
re_str = 'a.'
#3匹配第一個字符是a第二個字符是任意字符的字符串
re_str = r'a.'
#4.\w:匹配一個字符是字母,數(shù)字捣卤,或者下劃線
re_str = r'\w'
print(re.fullmatch(re_str,'b'))
#5.\s匹配一個空白字符(空格腌零、換行唆阿、制表符))
re_str = 'ar\sb'
#\d 匹配一個數(shù)字字符
re_str = '\d\d\d'
print(re.fullmatch(re_str,120))
#6.邊界檢測
\b
#字符開開始和結(jié)束都是邊界
#匹配三個任意字符的前面和后面都是單詞邊界的字符串
#^匹配字符串的開始
#(^the)匹配以the為開頭的字符串
re_str = r'^the'
print(re.fullmatch(re_str,'the'))
#7.匹配字符串結(jié)束
re_str = r'abc$'
#8.\W 匹配非數(shù)字字母下劃線
#9.\S匹配非空白字符
#10\D匹配非數(shù)字字符
#11\B 檢測非邊界
re_str = r'ab\B
part 2
import re
"""
1.匹配中括號中出現(xiàn)的任意一個字符
匹配一一個字符串驯鳖,前三位是abc,第四位是字符1或者字符a
"""
re_str = r'abc[1a]'
print(re.fullmatch(re_str, 'abca'))
#第一個是數(shù)字或者下劃線扭弧,后面是abc
re_str = r'[\d_]abc'
print(re.fullmatch(re_str, '9abc'))
#2.[^]匹配不在中括號中出現(xiàn)的任意一個字符
re_str =r'abc[^\da]'
#匹配一個字符串记舆,前三位是abc,第四位不是數(shù)字字符也不是字符a
#3.*匹配0次或者多次
re_str =r'\d*abc'
#匹配一個字符串前面是0個或者是多個數(shù)字字符,然后是abc
# [0-9]匹配1到9
# [a-z]匹配小寫字母a-z
# [A-Z]匹配任意一個大寫字母
#[a-zA-z]匹配任意字母
#寫一個正則表達(dá)式匹配判斷一個字符串是數(shù)字字符串
re_str = r'\d[0-9]*'
print(re.fullmatch(re_str, '123'))
#寫一個正則表達(dá)式檢測一個字符串是否是合格的標(biāo)識符(字母數(shù)字下劃線)
re_str = r'[a-zA-z_]\w*'
print(re.fullmatch(re_str, 'name'))
#4.+:匹配一個字符串或者多次
#匹配一個字符串開頭出現(xiàn)一個或者多次數(shù)字字符御蒲,然后在有0次或者多次數(shù)字衣赶,字母,下劃線
re_str = r'\d+\w*'
print(re.fullmatch(re_str, '12u3abc'))
#5.?:匹配出現(xiàn)0次或者1次
re_str = r'[a-z]?123'
print(re.fullmatch(re_str, 'a123'))
#判斷一個字符串是不是正整數(shù)字符串
re_str = r'[+]?[1-9]\d*'
print(re.fullmatch(re_str, '+0123'))
#6匹配N次{N}
re_str = r'\d{5}abc'
#前面5個數(shù)字然后abc
#6.{n,} >=n次
#7厚满,{m,n}最少M(fèi)次最多N次
#8 |:分支
#匹配一個字符串府瞄,是三個數(shù)字字符或者三個小寫字母
re_str = r'\d{3}|\[a-z]{3}'
#9括號()匹配的時候是分組,讓括號中的正則條件變成一個整體
"""========以下了解========"""
# 盡可能少:在能夠匹配到的前提下盡可能少
# 10. *? 重復(fù)任意次碘箍,盡可能少的重復(fù)
re_str = r'ba*?b'
print(re.match(re_str, 'baabaa'))
# 11. +? 重復(fù)一次或多次遵馆,盡可能少的重復(fù)
re_str = r'ba+?'
print(re.match(re_str, 'baaaa'))
# 12. ?? 重復(fù)0次或者1次, 盡可能少的重復(fù)
re_str = r'b??'
# 13. {N,}? 重復(fù)至少N次丰榴,盡可能少的重復(fù)
# 14. {N, M}? 重復(fù)N到M次货邓,盡可能少的重復(fù)
part 3 轉(zhuǎn)義
1.特殊符號轉(zhuǎn)義
正則中:. \ [] {} () * + ? ^ $ | 這些字符有特殊意義多艇,所以在正則表達(dá)式中逻恐,
如果想要單純表達(dá)這些字符,需要在前面加'';
注意:1. -峻黍,[],^,\ 在中括號中可能是特殊的符號,需要加
2. . {} () * + ? $ |在中括號中可以不用加,來表示字符
part 4 模塊方法
import re
"""
1.compile(正則字符串)講正則表達(dá)式字符串轉(zhuǎn)換成正則表達(dá)式對象
#轉(zhuǎn)換成正則表達(dá)式對象后复隆,可以通過對象調(diào)用方法。
"""
re_obct = re.compile(r'\w{6,12}')
print(re_obct.fullmatch('dwadwa'))
#匹配相關(guān)的方法
#2.full,match(正則表達(dá)式,需要匹配的字符串)完全匹配
#返回值是匹配對象,如果不成功返回None
match = re.fullmatch('\w{3}', '132')
print(match)
#a.獲取匹配到的結(jié)果
print(match.group())
#b.獲取匹配到的范圍
print(match.span())
print(match.start())#開始下標(biāo)
print(match.end())#結(jié)束下標(biāo)
print(match.string)
#3.match(正則表達(dá)式姆涩,字符串)不完全匹配挽拂,從字符串開頭匹配,匹配到正則表達(dá)式對應(yīng)的范圍為止骨饿。
match = re.match(r'\w{3}', 'hedslakdl')
print(match.group())
print(match.string)
#應(yīng)用:判斷一個字符串是否以某種字符串開頭
#4.search(正則表達(dá)式亏栈,字符串)在指定的字符串中查找某種字符串(以正則表達(dá)式來描述)
print(re.search(r'\d{2,}[a-z]', '1245465dwad113'))
#返回值是匹配對象,如果找不到返回None
#判斷一個字符串中是否包含某種字符串
#5.findall(正則表達(dá)式宏赘,字符串)獲取指定字符串中所有滿足正則條件的所有的子串
#返回值是一個列表绒北,列表里都是符合要求的字符串
result = re.findall(r'[a-zA-Z](\d+)','a132bdwa456465dwa')
print(result)
#注意:在通過正則表達(dá)式獲取子串的時候,可以通過在正則表達(dá)式中添加括號察署,來約束獲取的內(nèi)容(只獲取括號中匹配的內(nèi)容)匹配所有闷游。
#應(yīng)用:字符串提取
#括號語法無效
result = re.finditer(r'[a-zA-Z](\d+)','a132bdwa456465dwa')#返回一個迭代器,迭代器的內(nèi)容是匹配對象
print(result.__next__())
#7.re.split(正則表達(dá)式贴汪,字符串)按正則表達(dá)式匹配到的字符串進(jìn)行切割
result = re.split(r'/d+', '12ds4a364dsa4d3sa15')
print(result)
#sub替換(正則表達(dá)式脐往,替換字符串,原字符串)原字符串查找符合正則的子串扳埂,替換成新的字符串
#將制定字符串所有的SB替換成*
str1 = '傻逼业簿,你好sb,你全家都是SB,傻逼阳懂,傻子'
result = re.sub(r'sb|SB|Sb|sB|傻逼|傻', '**', str1)
print(result)