01-基本符號
1.什么是正則
正則表達(dá)式就是一個(gè)字符匹配的工具粘姜;
是由正則符號和普通字符組成束析,來匹配不同規(guī)律的字符
2.Python隊(duì)正則表達(dá)式的支持
Python中提供了一個(gè)re模塊阱州,用來支持正則表達(dá)式
fullmatch(正則表達(dá)式蟆盐,字符串)-用正則表達(dá)式去匹配字符串钻洒,如果匹配成功返回匹配結(jié)果吸祟,失敗返回none
Python中正則表達(dá)式的寫法:將正則內(nèi)容寫在字符串中,一般在這個(gè)字符串前面加r/R
import re
1普通字符
普通字符在表達(dá)式中代表字符本身
re_str = r'abc'
result = re.fullmatch(re_str,'abc')
print(result)
2 .- 匹配任意字符
在正則表達(dá)式中漫谷, .出現(xiàn)的位置仔雷,可以匹配一個(gè)任意字符
注意:一個(gè)點(diǎn)只能匹配一個(gè)字符
p匹配長度為三的字符串,中間是任意字符
re_str = r'a.c'
result = re.fullmatch(re_str,'a#c')
print(result)
3 \w-匹配字母數(shù)字下劃線
在正則表達(dá)式中舔示,\w出現(xiàn)的位置碟婆,可以匹配一個(gè)任意字母數(shù)字或者下劃線(其實(shí)也可以匹配Unicode編碼中除了阿斯科碼剩下的部分)
注意:
一個(gè)\w只能匹配一個(gè)字符
中文也可以匹配
re_str = r'\wab.'
result = re.fullmatch(re_str,'5abe')
print(result)
4 \s - 匹配空白字符
包括:空格、縮進(jìn)惕稻、制表符和換行符(\r ,\t,\n,空格)
re_str = r'\w\w\s\s..'
result = re.fullmatch(re_str,'sf\n\ten')
print(result)
5 \d - 匹配數(shù)字字符
re_str = r'\d\d\d..'
result = re.fullmatch(re_str,'644du')
print(result)
\b - 檢測單詞邊界
注意:\b 是檢測其出現(xiàn)的位置是否是單詞邊界竖共,不會(huì)對字符進(jìn)行匹配。
當(dāng)正則表達(dá)式中出現(xiàn)了\b俺祠,匹配的時(shí)候去掉\b公给,匹配成功后再看其出現(xiàn)的位置是否是單詞邊界
單詞邊界:單詞開頭,單詞結(jié)尾蜘渣、標(biāo)點(diǎn)符號淌铐、空白符號(只有能將單詞區(qū)分開的符號都屬于單詞邊界)
匹配字符串'hello,world',并且要求w 前面是單詞邊界蔫缸,h前面也是單詞邊界
re_str = r'\bhello,\bworld'
result = re.fullmatch(re_str,' hello,wolrd')
7 ^ - 檢測字符串開頭
在match和fullmatch中沒有意義腿准,search、findall等中有意義
re_str = r'^the'
result = re.fullmatch(re_str,'the')
8 $ -檢測字符串結(jié)尾
在match和fullmatch中沒有意義拾碌,search吐葱、findall等中有意義
re_str = r'the$'
result = re.fullmatch(re_str,'the56')
9 \大寫字母 - 對應(yīng)的功能是\小寫字母的功能取反
\W \D \S \B
1.普通字符集
列如:【abc】- 匹配一個(gè)字符是a或b或c
注意:一個(gè)中括號只能匹配一個(gè)字符
正則中有特殊功能的單個(gè)符號,在中括號中表示其本身(.$^+*|)
匹配字符的組合 符號在中括號中保持原有功能\w \b \d \s \W \D \S \B
re_str = r'\d[abcd]'
result = re.fullmatch(re_str,'8d')
print(result)
2.[字符1-字符2]-表示字符1 到字符2(要求:字符1的編碼制要小于字符2)
[a-z] - 匹配所有小寫字母
[A-Z] - 匹配所有大寫字母
[a-zA-Z] - 匹配所有字母
[1-7] - 數(shù)字字符1到7
[\u4e00-\u9fa5] - 匹配所有中文
re_str = r'[a-z]'
11 [^字符集]-匹配不在字符集中的任意一個(gè)
[^abc]-匹配除了abc以外的任意一個(gè)字符
[^\d]-匹配除了數(shù)字字符以外的任意一個(gè)字符
[^a-z]-匹配除了小寫字母以外的任意一個(gè)字符
re_str = r'[^abc]'
result = re.fullmatch(re_str,'f')
print(result)
02-正則控制匹配次數(shù)
import re
1* - 匹配0次或者多次
a* - a出現(xiàn)0次或多次校翔,'','a','aaa'...都可以匹配
\d* - 任意數(shù)字出現(xiàn)0次或多次'','1''23'...都可以
[abc]* - a或b或c
[a-z]* -
注意:在[]外面的*前面需要一個(gè)字符或一個(gè)匹配字符的符號
print(re.fullmatch(r'a*b','aaab'))
print(re.fullmatch(r'[a-z]*''sdwefrefefw'))
+ 匹配一次或多次
a+ a至少出現(xiàn)一次
\d+ 數(shù)字至少出現(xiàn)一次
3.弟跑? 匹配0次或一次
a? a出現(xiàn)0次或一次
匹配一個(gè)整數(shù)
re_str = r'[+-]?[1-9]\d*'
4{}
{N} - 匹配n次,a{3}:匹配3個(gè)a
{M,N}-匹配M-n次 a{3,5} - 三個(gè)或四個(gè)或五個(gè)a
{,N} - 最多N次(0-n)
{m防症,}-至少m次
密碼:字母和數(shù)字組成孟辑,數(shù)字不開頭哎甲,6-12位
re_str = r'[A-Za-z][\dA-Za-z]{5-11}'
03-分支、捕獲和貪婪
import re
1.分支
條件1 | 條件2 - 匹配條件1或條件2
\d{2} | [a-z] - 兩個(gè)數(shù)字字符或者一個(gè)小寫字母
a\d{2} | \w{2} - a后兩個(gè)數(shù)字或者兩個(gè)數(shù)字字母下劃線
注意:正則中的分支也會(huì)出現(xiàn)短路扑浸,當(dāng)條件1可以匹配,就不會(huì)在使用條件2匹配
匹配所有的數(shù)燕偶,包括正負(fù)小數(shù)和零
re_str = r'[+-]?[1-9]\d*[.]?\d*|[+-]?0[.]\d+|0'
print(re.fullmatch(re_str,'2'))
2 () - 捕獲和分組
分組 - 將括號中的類容作為一個(gè)整體
'abc123'
'abcAJS'
re_str = r'abc(\d{3}|[A-Z]{3})'
RE = r'(\d[a-z]){3}'#數(shù)字小寫字母出現(xiàn)三次
捕獲
通過正則獲取符合條件的字串的時(shí)候喝噪,可以在正則表達(dá)式中加括號,匹配后取值只取括號中內(nèi)容
re.findall(正則表達(dá)式指么,字符串) - 在字符串中找所有符合正則表達(dá)式的結(jié)果酝惧,返回列表
取值只取括號中內(nèi)容
重復(fù)匹配
帶多個(gè)分組的正則表達(dá)式可以在分組后面通過添加\數(shù)字來重復(fù)前面第幾個(gè)分組中匹配的內(nèi)容
說明:\數(shù)字 - 代表前面第幾個(gè)分組;\1代表第一個(gè)分組
re_str = r'\d{3}([a-z]{2})a\1'
print(re.fullmatch(re_str,'235heahe'))
3.貪婪
匹配次數(shù)后加?就是貪婪匹配:*伯诬? +晚唇? ?? {m,n}? -表示盡可能少的重復(fù)
4.轉(zhuǎn)義符號
\w + * ? ( ) [^ -]
在正則表達(dá)式中偶特殊意義或特殊功能的符號前加\來取消其特殊意義
\w - 代表兩個(gè)字符,分別是\ 和w
+ 代表+字符
* 代表*字符
04-re模塊
import re
1.compile
compile(正則表達(dá)式) - 將正則表達(dá)式轉(zhuǎn)換成正則表達(dá)式對象
轉(zhuǎn)換成對象后可以通過對象調(diào)用對象方法
re_str = '\d{3}'
2.macth/fullmacth
fullmatch(正則表達(dá)式盗似,字符串)-完全匹配哩陕,從開頭到結(jié)尾
match(正則表達(dá)式,字符串)-不完全匹配赫舒,只匹配開頭
匹配成功返回匹配對象悍及,失敗返回none
匹配對象
1.獲取span - 匹配到的內(nèi)容的范圍,(開始下標(biāo)接癌,結(jié)束下標(biāo))心赶,結(jié)束下標(biāo)取不到
匹配對象.span()-獲取整個(gè)正則表達(dá)式匹配的范圍
匹配對象.span(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的范圍
2.start和end - 獲取匹配結(jié)果的開始下標(biāo)和結(jié)束下標(biāo)
匹配對象.start()/匹配對象.end() - 獲取匹配結(jié)果的開始下標(biāo)和結(jié)束下標(biāo)
匹配對象.start(n)/匹配對象.end(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的開始下標(biāo)和結(jié)束下標(biāo)
3.group - 獲取匹配到的內(nèi)容
匹配對象.group()-獲取整個(gè)正則表達(dá)式匹配的內(nèi)容
匹配對象.group(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的內(nèi)容
4.string - 獲取用來匹配的原字符串
匹配對象.string
3.search
search(正則表達(dá)式,字符串)-匹配字符串中第一個(gè)滿足正則表達(dá)式的字串缺猛,匹配成功返回匹配對象缨叫,不成功返回none
有多個(gè)只匹配第一個(gè)
4.split
split(正則表達(dá)式,字符串)-在字符串中按照滿足正則表達(dá)式的字串對字符串進(jìn)行切割
返回值是個(gè)列表
5.sub
sub(正則表達(dá)式荔燎,新字串耻姥,字符串)-用新串替換字串,返回一個(gè)替換后的字符串
6.findall
findall(正則表達(dá)式有咨,字符串)-在字符串中獲取滿足正則表達(dá)式的所有字符咏闪,返回一個(gè)列表,元素是字符串
注意:如果正則表達(dá)式中有一個(gè)分組摔吏,結(jié)果是表達(dá)式中那個(gè)分組匹配到的結(jié)果
如果表達(dá)式中分組個(gè)數(shù)大于1鸽嫂,結(jié)果是一個(gè)列表,元素是元組征讲,元組中內(nèi)容是匹配到的內(nèi)容
6.finditer
finditer(表達(dá)式据某,字符串)- 獲取字符串中表達(dá)式的內(nèi)容,返回一個(gè)迭代器诗箍,元素是匹配對象