正則基本符號(hào)
1.什么是正則表達(dá)式
正則表達(dá)式就是字符匹配的工具;是由正則符號(hào)和普通字符組成,來(lái)匹配不同規(guī)律的字符串
2.python對(duì)正則表達(dá)式的支持
python中提供了一個(gè)re模塊,用來(lái)支持正則表達(dá)式
fullmatch(正則表達(dá)式,字符串) - 用正則表達(dá)式去完全匹配字符串
如果匹配成功,返回匹配結(jié)果,失敗返回None
python中的正則表達(dá)式寫(xiě)法:將正則內(nèi)容寫(xiě)在字符串中,一般這個(gè)字符串前面會(huì)加r\R
1.普通字符
普通字符在正則表達(dá)式中,代表本身字符
2 .匹配任意字符
在正則表達(dá)式中,.出現(xiàn)的位置,可以匹配一個(gè)任意字符
注意:一個(gè).只能匹配一個(gè)字符
3. \w(匹配字符數(shù)字字母下劃線(xiàn))
在正則表達(dá)式,\w出現(xiàn)的位置,可以匹配一個(gè)任意的字符數(shù)字字母下劃線(xiàn)(其實(shí)也可以匹配Unicode編碼中除了ascii碼剩下的部分)中文也能匹配
4. \s(匹配空白字符)
空白字符包括:空格,制表符和換行符(空格,\t,\r,\n)
5. \d(匹配數(shù)字字符)
6. \b(檢查單詞邊界)
注意:檢查\b出現(xiàn)的位置是否是單詞邊界,不會(huì)對(duì)字符進(jìn)行匹配
當(dāng)正在表達(dá)式中出現(xiàn)了\b,匹配的時(shí)候去掉\b,匹配成功后在看\b出現(xiàn)的位置是否是單詞邊界
單詞邊界:字符串開(kāi)頭,字符串結(jié)尾,標(biāo)點(diǎn)符號(hào),空白符號(hào)等(只要能夠?qū)卧~區(qū)分開(kāi)的符號(hào)都是單詞邊界)
7 ^(檢測(cè)字符串開(kāi)頭)
在match和fullmatch中沒(méi)有意義,search、findall等中有意義
8 $(檢測(cè)字符串結(jié)尾)
在match和fullmatch中沒(méi)有意義
\大寫(xiě)字母對(duì)應(yīng)的功能是 \小寫(xiě)字母取反
\W - 匹配非數(shù)字字母下劃線(xiàn)
\D - 匹配非數(shù)字字符
\S - 匹配非空白字符
\B - 匹配非單詞邊界
10.[字符集]-(匹配中括號(hào)出現(xiàn)的任意一個(gè)字符)
例如:[abc] - 匹配一個(gè)字符是a或者b或者c
注意:a.一個(gè)[]只能匹配一個(gè)字符
b.正則中有特殊功能的單個(gè)符號(hào),例如:. ^ + * |等
c.匹配字符的組合字符,在中括號(hào)中保持原來(lái)的功能,例如:\w \d \s \W \S \D
[字符1-字符2] - 表示字符1到字符2(注意:要求字符1的編碼值要小于字符2的編碼值)
[a-z] - 表示匹配所有小寫(xiě)字母
[A-Z] - 表示匹配所有大寫(xiě)字母
[a-zA-Z] - 表示匹配所有的字母
[1-7] - 匹配數(shù)字字符1到7
[\u4e00-\u9fa5] - 匹配所有的中文
[字符1字符2-] - 這兒的-表示減號(hào)本身
[^字符集] - 匹配不在字符集中的任意一個(gè)字符
正則控制匹配次數(shù)
1 *(匹配0次或者多次)
a* - a出現(xiàn)0次或者多次,'' 'a' 'aa'....
\d* - 任意數(shù)字出現(xiàn)0次或者多次 '' '1' '551254'.....
[abc]* - abc中的一個(gè)出現(xiàn)0次或者多次
[A-F]* - A到F中任意字符出現(xiàn)0次或者多次
注意:在[]外面的*的前面需要一個(gè)字符或者一個(gè)匹配字符的符號(hào)
2. +(匹配1次或者多次)
a+ a至少出現(xiàn)一次
\d+ -數(shù)字至少出現(xiàn)一次
3 ?(匹配0次或者1次)
a? - a出現(xiàn)0次或者1次, '' 'a' 可以匹配
4.{}
{N} - 匹配N(xiāo)次,a{3}:匹配三個(gè)a
{M,N} - 匹配M到N次, a{3, 5},匹配三個(gè)a,或者四個(gè)a,或者五個(gè)a
{,N} - 最多匹配N(xiāo)次(0-N) a{, 3} '' 'a' 'aa' 'aaa'
{M,} - 至少匹配M次 例如:a{3,} 'aaa' 'aaaa'.....
分之、捕獲和貪婪
1.分之
條件1 | 條件2 - 匹配條件1或者條件2
\d{2}|[a-z]匹配兩個(gè)數(shù)字字符或者一個(gè)小寫(xiě)字母
a\d{2}|\w{2} - 匹配一個(gè)a后面兩個(gè)數(shù)字,或者就是兩個(gè)數(shù)字字母下劃線(xiàn)
注意:正則中的分之也會(huì)出現(xiàn)短路,當(dāng)條件1可以匹配,就不會(huì)在使用條件2進(jìn)行匹配
2.() - 捕獲和分組
a.分組 - 將括號(hào)中的內(nèi)容作為一個(gè)整體
'abc123'
'abcHJS'
re_str1 = r'abc\d{3}|abc[A-Z]{3}'
re_str2 = r'abc(\d{3}|[A-Z]{3})'
b.捕獲
通過(guò)正則獲取符合條件的子串的時(shí)候,可以在正則表達(dá)式中加括號(hào),匹配后只
獲取括號(hào)里面匹配到的內(nèi)容
re.findall(正則表達(dá)式,字符串) - 在字符串中獲取符合正則表達(dá)式條件的所有子串,返回一個(gè)列表
c.重復(fù)匹配
帶多個(gè)分組的正則表達(dá)式中,可以在分組的后面通過(guò)添加'\數(shù)字'來(lái)重復(fù)前面第幾個(gè)分組中匹配到的內(nèi)容
說(shuō)明:\數(shù)字 - 這兒的數(shù)字代表前面第幾個(gè)分組;\1代表第一個(gè)分組 \2代表第二個(gè)分組
3.貪婪
匹配次數(shù)后加?就是貪婪匹配:*?, +?, ??, {M,N}?, {M,}?表示盡可能少的重復(fù)
4.轉(zhuǎn)義符號(hào)
在正則表達(dá)式中可以在有特殊意義或者特殊功能的符號(hào)前加\來(lái)取消其特殊功能
\w - 代表兩個(gè)字符分別是''和w
+ 代表+字符
*
?
[],(),{} 表示字符的時(shí)候,前面也要加
注意:在中括號(hào)中,\必須加\表示\本身,在最前面加\表示本身,-在兩個(gè)字符之間加\表示-本身
re模塊
1.compile
compile(正則表達(dá)式) - 將正則表達(dá)式轉(zhuǎn)換成正則表達(dá)式對(duì)象
轉(zhuǎn)換成對(duì)象后,可以通過(guò)對(duì)象調(diào)用對(duì)象方法
2.match 和fullmatch
a.fullmatch(正則表達(dá)式,字符串) - 完全匹配,從字符串開(kāi)頭匹配到字符串結(jié)束
b.match(正則表達(dá)式,字符串) - 不完全匹配,只匹配字符串開(kāi)頭
匹配成功返回匹配對(duì)象,匹配失敗返回None
1.span - 匹配到的內(nèi)容的范圍,(開(kāi)始下標(biāo),結(jié)束下標(biāo)),結(jié)束下標(biāo)取不到
匹配對(duì)象.span() - 獲取整個(gè)正則表達(dá)式匹配到的范圍
匹配對(duì)象.span(n) - 獲取正則表達(dá)式中第n個(gè)分組匹配到的范圍(前提是有分組)
start和end - 獲取匹配結(jié)果的開(kāi)始下標(biāo)和結(jié)束下標(biāo)
匹配對(duì)象.start()/匹配對(duì)象.end() - 獲取整個(gè)正則表達(dá)式匹配到的開(kāi)始下標(biāo)/結(jié)束下標(biāo)
匹配對(duì)象.start(n)/匹配對(duì)象.end(n) - 獲取正則表達(dá)式中第n個(gè)分組匹配到的開(kāi)始/結(jié)束下標(biāo)
3.group - 獲取匹配到的內(nèi)容
匹配對(duì)象.group() - 獲取整個(gè)正則表達(dá)式匹配到的內(nèi)容
匹配對(duì)象.group(n) - 獲取正則表達(dá)式中第n個(gè)分組匹配到的內(nèi)容
4.string - 獲取用來(lái)匹配的原字符串
匹配對(duì)象.string
3.search
search(正則表達(dá)式,字符串) - 匹配字符串中,第一個(gè)滿(mǎn)足正則表達(dá)式的子串,如果
匹配成功返回匹配對(duì)象,或者返回None
4.split
split(正則表達(dá)式,字符串) - 在字符串中按照滿(mǎn)足正則表達(dá)式條件的子串對(duì)字符串進(jìn)行切割
5.sub
sub(正則表達(dá)式,新字符串,字符串) - 用新的字符串替換滿(mǎn)足正則表達(dá)式的子串,返回
一個(gè)替換后的字符串
6.findall
findall(正則表達(dá)式,字符串) - 在字符串中獲取滿(mǎn)足正則表達(dá)式的所有的字符串,返回
一個(gè)列表,列表元素是字符串
注意:如果這個(gè)正則表達(dá)式中有一個(gè)分組,結(jié)果是列表中那個(gè)分組匹配到的結(jié)果
如果這個(gè)正則表達(dá)式中分組的個(gè)數(shù)大于1,結(jié)果是一個(gè)列表,列表中的元素
是元組,元組中是每個(gè)分組匹配到的內(nèi)容
7.finditer
finditer(正則表達(dá)式,字符串) - 獲取字符串中滿(mǎn)足正則表達(dá)式的內(nèi)容,返回的是一個(gè)
迭代器,迭代器中的元素是匹配對(duì)象