摘要
^表示行的開頭,,^\d表示必須以數(shù)字開頭,。 $表示行的結(jié)束,\d$表示必須以數(shù)字結(jié)束,。 你可能注意到了,,py也可以匹配'python'–>py; 但是加上^py$就變成了整行匹配,,就只能匹配’py’了,匹配'python'時(shí),就什么也得不到,。 參考表 正則表達(dá)式特殊序列 re模塊 re.compile(pattern[, flags]) 把正則表達(dá)式的模式和標(biāo)識(shí)轉(zhuǎn)化成正則表達(dá)式對(duì)象,,供 match() 和 search() 這兩個(gè)函數(shù)使用。 re 所定義的 flag 包括:
以下兩種用法結(jié)果相同: (A)
(B)
因此我們強(qiáng)烈建議使用Python的r前綴,,就不用考慮轉(zhuǎn)義的問題了
search re.search(pattern, string[, flags]) 在字符串中查找匹配正則表達(dá)式模式的位置,返回 MatchObject 的實(shí)例,,如果沒有找到匹配的位置,,則返回 None。 對(duì)于已編譯的正則表達(dá)式對(duì)象來說(re.RegexObject),,有以下 search 的方法: search (string[, pos[, endpos]]) 若 regex 是已編譯好的正則表達(dá)式對(duì)象,,regex.search(string, 0, 50) 等同于 regex.search(string[:50], 0)。
match re.match(pattern, string[, flags]) 判斷 pattern 是否在字符串開頭位置匹配,。對(duì)于 RegexObject,,有: match(string[, pos[, endpos]]) match() 函數(shù)只在字符串的開始位置嘗試匹配正則表達(dá)式,也就是只報(bào)告從位置 0 開始的匹配情況,,而 search() 函數(shù)是掃描整個(gè)字符串來查找匹配,。如果想要搜索整個(gè)字符串來尋找匹配,應(yīng)當(dāng)用 search(),。
雖然,match默認(rèn)是從開頭匹配,,但是,,如果指定位置,仍然能成功,;但是,!match也是從指定位置開始匹配,不匹配仍然會(huì)失敗,,這一點(diǎn)就和search有區(qū)別啦,。 match()方法判斷是否匹配,如果匹配成功,,返回一個(gè)Match對(duì)象,,否則返回None。
split re.split(pattern, string[, maxsplit=0, flags=0]) 此功能很常用,,可以將將字符串匹配正則表達(dá)式的部分割開并返回一個(gè)列表,。對(duì) RegexObject,有函數(shù): split(string[, maxsplit=0]) 對(duì)于一個(gè)找不到匹配的字符串而言,,split 不會(huì)對(duì)其作出分割
這里用字符串自帶的split方法就很不靈活,。
看出差別了吧,,很強(qiáng)大! 再來一個(gè)終極的:
r'[\s\,\;]+'的正則表達(dá)式意思為:空格或者,或者;出現(xiàn)1次或1次以上都是滿足條件的分割符號(hào),!所以,,最后結(jié)果還是很干凈。 findall re.findall(pattern, string[, flags]) 在字符串中找到正則表達(dá)式所匹配的所有子串,,并組成一個(gè)列表返回,。同樣 RegexObject 有: findall(string[, pos[, endpos]])
finditer re.finditer(pattern, string[, flags]) 和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,,并組成一個(gè)迭代器返回,。同樣 RegexObject 有: finditer(string[, pos[, endpos]]) sub re.sub(pattern, repl, string[, count, flags]) 在字符串 string 中找到匹配正則表達(dá)式pattern 的所有子串,用另一個(gè)字符串 repl 進(jìn)行替換,。如果沒有找到匹配 pattern 的串,,則返回未被修改的 string。Repl 既可以是字符串也可以是一個(gè)函數(shù),。 返回值是替換后的新字符串,。 對(duì)于 RegexObject 有: sub(repl, string[, count=0])
通過上面的例子,可以看出,count是可以缺省的,,同時(shí),,默認(rèn)值是0,表示全部替換,;否則,,就是指定替換幾個(gè)。 subn re.subn(pattern, repl, string[, count, flags]) 該函數(shù)的功能和 sub() 相同,,但它還返回新的字符串以及替換的次數(shù),。同樣 RegexObject 有: subn(repl, string[, count=0])
分組 除了簡(jiǎn)單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能,。用()表示的就是要提取的分組(Group),。比如: ^(\d{3})-(\d{3,8})$分別定義了兩個(gè)組,可以直接從匹配的字符串中提取出區(qū)號(hào)和本地號(hào)碼:
通過實(shí)驗(yàn),,如果不用括號(hào),,得到的Match對(duì)象課可以使用例如a.group(0)或者a.group()但是,使用a.group(1)就會(huì)報(bào)錯(cuò)的,。 貪婪匹配 正則匹配默認(rèn)是貪婪匹配,,也就是匹配盡可能多的字符。舉例如下,,匹配出數(shù)字后面的0:
由于\d+采用貪婪匹配,,直接把后面的0全部匹配了,結(jié)果0*只能匹配空字符串了。 必須讓\d+采用非貪婪匹配(也就是盡可能少匹配),,才能把后面的0匹配出來,,加個(gè)?就可以讓d+采用非貪婪匹配:
Python正則表達(dá)式學(xué)習(xí)資源 |
|