正則表達(dá)式
簡稱為regex,是一些由字符和特殊符號組成的字符串
能夠按照某種模式匹配一系列有相似特征的字符串
使用正則表達(dá)式
{M,N}匹配M-N次,最大化優(yōu)先
例如:a{2,5}
? ? aabcd => aa
? ? caaaacd => aaaa
? ? caaaaaaaaacd => aaaaa
匹配特殊字符
需要用"\"進(jìn)行轉(zhuǎn)義
? ? 例如:\.com
? ? ? ? ? ? wyh.com => .com
? ? 例如:http:\/\/w+
? ? ? ? ? ? ssshttp://www.baidu.com => http:/www
指定匹配選項(xiàng)
使用[]指定要匹配的集合
? ? 例如: [abc]{2}? 匹配abc中的任意兩個(gè)字符
? ? ? ? ? ? cba666 => cb
? ? ? ? ? ? xba666 => ba
? ? ? ? ? ? xbb666 => bb
使用[^]指定不要匹配的內(nèi)容
? ? 例如:[^abc]{2}
? ??????????abssjhj12sdab => ss
正則表達(dá)式分組
重復(fù)一個(gè)字符串時(shí)
使用()進(jìn)行分組,使用(?P<name>\w+)指定組名
從左向右,以分組的左括號為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號為1署浩,第二個(gè)為2,以此類推
例如:表達(dá)式(A)(B(C))分組情況解析
? ? ? ? ? ? 0? ? ????????(A)(B(C))????
? ? ? ? ? ? 1????????????(A)
? ? ? ? ? ? 2?????????????(B(C))
? ? ? ? ? ? 3?????????????(C)
使用()對匹配的內(nèi)容分組
? ? 例如:(\d{1,3}\.){3}\d{1,3}
? ??????????192.168.0.0? ? ? ? ? ??
使用\1扫尺、\2反向引用
? ? 例如:S(he) (l..e)s \1r \2r.
????????????She loves her lover.
貪婪模式vs非貪婪模式
貪婪匹配
? ? 在整個(gè)表達(dá)式匹配成功的前提下筋栋,盡可能多的匹配
非貪婪模式
? ? 在整個(gè)表達(dá)式匹配成功的前提下,以最少的匹配字符
默認(rèn)是貪婪模式
舉例:
????表達(dá)式 ab.+c(貪婪模式)
? ????? 測試數(shù)據(jù):abfhasdjfgaghcdhasjdjkcsdhajskdhk
? ????? 匹配結(jié)果:abfhasdjfgaghcdhasjdjkc
????表達(dá)式 ab.+?c(非貪婪模式正驻,只需要在匹配pattern中加上"?")
????????測試數(shù)據(jù):abfhasdjfgaghcdhasjdjkcsdhajskdhk
? ? ????匹配結(jié)果:abfhasdjfgaghc
正則的進(jìn)階(python中的應(yīng)用)
re模塊
compile()函數(shù)
compile(pattern, flags=0)
使用任何可選的標(biāo)記來編譯正則表達(dá)式的模式弊攘,然后返回一個(gè)正則表達(dá)式對象
推薦編譯,但不是必須的
match()函數(shù)
match(pattern, string, flags=0)
嘗試使用帶有可選的標(biāo)記的正則表達(dá)式的模式來匹配字符串(從頭開始匹配)姑曙。如果匹配成功襟交,就返回匹配對象;如果失敗伤靠,就返回None
findall()函數(shù)
findall(pattern, string[,flags])
查找字符串中所有(非重復(fù))出現(xiàn)的正則表達(dá)式模式婿着,并返回一個(gè)匹配列表
search()函數(shù)
search(pattern, string[, flags])
使用可選標(biāo)記搜索字符串中第一次出現(xiàn)的正則表達(dá)式模式。如果匹配成功,則返回匹配對象竟宋;如果失敗,則返回None
ps:search與match的不同在于search會(huì)一直搜索匹配的字符串形纺,直到第一次匹配成功或者搜索完整個(gè)字符串為止丘侠,而match只會(huì)從頭進(jìn)行搜索若不匹配就返回None
group()與groups()函數(shù)
group(num):返回整個(gè)匹配對象,或者編號為num的特定子組逐样,若匹配對象為空時(shí)蜗字,會(huì)報(bào)錯(cuò),所以使用時(shí)推薦在前面加上if判斷
groups():返回一個(gè)包含所有匹配子組的元組(如果沒有成功匹配脂新,則返回一個(gè)空元組)
groupdict():匹配成功挪捕,返回一個(gè)由帶有名字的子組組成字典
split()函數(shù)
split(pattern, string[, maxsplit])
根據(jù)正則表達(dá)式的模式分隔符,split函數(shù)將字符串分割為列表争便,然后返回成功匹配的列表级零,分割最多操作max次(默認(rèn)分割所有匹配成功的位置)
sub()函數(shù)
sub(pattern, repl, string[, count])
使用repl替換string中每一個(gè)匹配的子串后返回替換后的字符串,最多操作count次(默認(rèn)替換所有)