字符分類
常用字符分類的縮寫(xiě)代碼:
\d--------------0到9的任何數(shù)字
?\D--------------除0到9的數(shù)字以外的任何字符
?\w--------------任何字母匾委、數(shù)字或者下劃線字符(可以認(rèn)為是匹配單詞字符)
\W--------------除字母、數(shù)字和下劃線以外的字符
\s--------------空格驻襟、制表符或者換行符(可以認(rèn)為是匹配空白字符)
\S--------------除空格璧帝、制表符和換行符以外的任何字符
建立自己的字符分類
1捍岳、用方括號(hào)定義自己的字符分類
2、例如裸弦,字符分類[aeiouAEIOU]將匹配所有元音字符祟同,不論大小寫(xiě)
3、也可以使用短橫表示字母或數(shù)字的范圍理疙。例如,字符分類[a-zA-Z0-9]將匹配所有小寫(xiě)字母泞坦、大寫(xiě)字母和數(shù)字窖贤。
4、請(qǐng)注意贰锁,在方括號(hào)內(nèi)赃梧,普通的正則表達(dá)式符號(hào)不會(huì)被解釋。這意味著豌熄,你不需要前面加上倒斜杠轉(zhuǎn)義.授嘀、*、?或()字符锣险。例如蹄皱,字符分類將匹配數(shù)字0 到5 和一個(gè)句點(diǎn)。你不需要將它寫(xiě)成[0-5.]芯肤。
5巷折、通過(guò)在字符分類的左方括號(hào)后加上一個(gè)插入字符(^),就可以得到“非字符類”崖咨。非字符類將匹配不在這個(gè)字符類中的所有字符
插入字符和美元字符
1锻拘、可以在正則表達(dá)式的開(kāi)始處使用插入符號(hào)(^),表明匹配必須發(fā)生在被查找文本開(kāi)始處击蹲。
2署拟、類似地婉宰,可以再正則表達(dá)式的末尾加上美元符號(hào)($),表示該字符串必須以這個(gè)正則表達(dá)式的模式結(jié)束推穷。
3芍阎、可以同時(shí)使用^和$,表明整個(gè)字符串必須匹配該模式缨恒,也就是說(shuō)谴咸,只匹配該字符串的某個(gè)子集是不夠的。如果使用了^和$骗露,那么整個(gè)字符串必須匹配該正則表達(dá)式
通配字符
在正則表達(dá)式中岭佳,.(句點(diǎn))字符稱為“通配符”。它匹配除了換行之外的所有字符萧锉。
句點(diǎn)字符只匹配一個(gè)字符珊随,這就是為什么在前面的例子中,對(duì)于文本flat柿隙,只匹配lat叶洞。要匹配真正的句點(diǎn),就是用倒斜杠轉(zhuǎn)義禀崖。
1).*匹配
點(diǎn)-星將匹配除換行外的所有字符衩辟。句點(diǎn)字符表示“除換行外所有單個(gè)字符”,星號(hào)字符表示“前面字符出現(xiàn)零次或多次”波附。
點(diǎn)-星使用“貪心”模式:它總是匹配盡可能多的文本艺晴。要用“非貪心”模式匹配所有文本,就使用點(diǎn)-星和問(wèn)號(hào)掸屡。像和大括號(hào)一起使用時(shí)那樣封寞,問(wèn)號(hào)告訴Python 用非貪心模式匹配。
2)句點(diǎn)字符匹配所有字符
通過(guò)傳入re.DOTALL 作為re.compile()的第二個(gè)參數(shù)仅财,可以讓句點(diǎn)字符匹配所有字符狈究,包括換行字符。
不區(qū)分大小寫(xiě)的匹配
?要讓正則表達(dá)式不區(qū)分大小寫(xiě)盏求,可以向re.compile()傳入re.IGNORECASE 或re.I抖锥,作為第二個(gè)參數(shù)。
用sub()方法替換字符串
?1风喇、正則表達(dá)式不僅能找到文本模式宁改,而且能夠用新的文本替換掉這些模式。
2魂莫、Regex對(duì)象的sub()方法需要傳入兩個(gè)參數(shù)还蹲。第一個(gè)參數(shù)是一個(gè)字符串,用于取代發(fā)現(xiàn)的匹配。第二個(gè)參數(shù)是一個(gè)字符串谜喊,即正則表達(dá)式潭兽。sub()方法返回替換完成后的字符串。
3斗遏、有時(shí)候山卦,你可能需要使用匹配的文本本身,作為替換的一部分诵次。在sub()的第一個(gè)參數(shù)中账蓉,可以輸入\1、\2逾一、\3……铸本。表示“在替換中輸入分組1、2遵堵、3……的文本”箱玷。
例如,假定想要隱去密探的姓名陌宿,只顯示他們姓名的第一個(gè)字母锡足。要做到這一點(diǎn),可以使用正則表達(dá)式Agent(\w)\w壳坪,傳入r'\1*'作為sub()的第一個(gè)參數(shù)舶得。字符串中的\1 將由分組1 匹配的文本所替代,也就是正則表達(dá)式的(\w)分組弥虐。
管理復(fù)雜的正則表達(dá)式
如果要匹配的文本模式很簡(jiǎn)單扩灯,正則表達(dá)式就很好。但匹配復(fù)雜的文本模式霜瘪,可能需要長(zhǎng)的、費(fèi)解的正則表達(dá)式惧磺。你可以告訴re.compile()颖对,忽略正則表達(dá)式字符串中的空白符和注釋,從而緩解這一點(diǎn)磨隘。要實(shí)現(xiàn)這種詳細(xì)模式缤底,可以向re.compile()傳入變量re.VERBOSE,作為第二個(gè)參數(shù)番捂。
組合使用re.IGNORECASE个唧、re.DOTALL 和re.VERBOSE
re.compile()函數(shù)只接受一個(gè)值作為它的第二參數(shù)∩柙ぃ可以使用管道字符(|)將變量組合起來(lái)徙歼,從而繞過(guò)這個(gè)限制。管道字符在這里稱為“按位或”操作符。通過(guò)管道可以在re.compile()函數(shù)中使用以上三個(gè)變量魄梯。
正則表達(dá)式符號(hào)復(fù)習(xí)
?匹配零次或一次前面的分組桨螺。
?*匹配零次或多次前面的分組。
?+匹配一次或多次前面的分組酿秸。
?{n}匹配n 次前面的分組灭翔。
?{n,}匹配n 次或更多前面的分組。
?{,m}匹配零次到m 次前面的分組辣苏。
?{n,m}匹配至少n 次肝箱、至多m 次前面的分組。
?{n,m}?或*?或+?對(duì)前面的分組進(jìn)行非貪心匹配稀蟋。
?^spam 意味著字符串必須以spam 開(kāi)始煌张。
?spam$意味著字符串必須以spam 結(jié)束。
?.匹配所有字符糊治,換行符除外唱矛。
?\d、\w 和\s 分別匹配數(shù)字井辜、單詞和空格绎谦。
?\D、\W 和\S 分別匹配出數(shù)字粥脚、單詞和空格外的所有字符窃肠。
?[abc]匹配方括號(hào)內(nèi)的任意字符(諸如a、b 或c)刷允。
?[^abc]匹配不在方括號(hào)內(nèi)的任意字符冤留。