1、正則表達(dá)式使用的特殊符號(hào)和字符
1.1、用管道符號(hào)( | )匹配多個(gè)正則表達(dá)式模式,即或,匹配多個(gè)表達(dá)式。
例:at|home 匹配at,home
1.2、匹配任意一個(gè)單個(gè)的字符( . ),但是除了換行符。如果要匹配.號(hào)本身,那需要轉(zhuǎn)義字符,即\..net,匹配.net
例:A.B 匹配ACB,A1B,A+B
1.3、從字符串的開(kāi)頭或結(jié)尾或單詞邊界開(kāi)始匹配( ^,/$ ,/\b, /\B )
例:正則表達(dá)式模式 匹配的字符串
^From :匹配任何以 From 開(kāi)始的字符串
/bin/tcsh$ :匹配任何以 /bin/tcsh 結(jié)束的字符串
^Subject: hi$: 匹配僅由 Subject: hi 組成的字符串
\bthe: 任何以"the"開(kāi)始的字符串
\Bthe 任意包含“the”但不以“the”開(kāi)頭的單詞
1.3.1、“matching”是試圖從整個(gè)字符串的開(kāi)頭進(jìn)行匹配,而 “searching” 則可從一個(gè)字符串的任意位置開(kāi)始匹配
1.4、創(chuàng)建字符類(lèi)( [ ] ),使用方括號(hào)的正則表達(dá)式會(huì)匹配方括號(hào)里的任何一個(gè)字符
例:b[aeiu]t :bat, bet, bit, but
[cr][23][dp][o2] :一個(gè)包含 4 個(gè)字符的字符串: 第一個(gè)字符是“r” 或“c”, 后面是“2”或 “3”,再接下來(lái)是 “d” 或 “p”,最后是 “o” 或 “2“
1.5、指定范圍 ( - ) 和 否定( ^ ),方括號(hào)里一對(duì)符號(hào)中間的連字符(-)用來(lái)表示一個(gè)字符的范圍;如果在左方括號(hào)后第一個(gè)字符是上箭頭符號(hào)(^),就表示不匹配指定字符集里的任意字符。
例:z.[0-9] :字符"z",后面跟任意一個(gè)字符,然后是一個(gè)十進(jìn)制數(shù)字,如za2
[^ab]: 除a,b之外的任意一個(gè)字符。
1.6、使用閉包操作符 ( *, +, ?, {} ) 實(shí)現(xiàn)多次出現(xiàn)/重復(fù)匹配
1.6.1、星號(hào)或稱(chēng)星號(hào)操作符匹配它左邊那個(gè)正則表達(dá)式出現(xiàn)零次或零次以上的情況
1.6.2、加號(hào)(+)操作符匹配它左邊那個(gè)正則表達(dá)式模式至少出現(xiàn)一次的情況
1.6.3、問(wèn)號(hào)操作符( ? )匹配它左邊那個(gè)正則表達(dá)式模式出現(xiàn)零次或一次的情況
1.6.4、花括號(hào)操作符({ }),如,{N},則表示匹配 N 次出現(xiàn);如果是一對(duì)值,即,{M, N},就表示匹配 M 次到 N 次出現(xiàn)
舉例:[dn]ot? :字符"d"或"o", 后面是一個(gè)"o", 最后是最多一個(gè)字符"t", 即, do, no, dot,not
[0-9]{15,16} :15 或 16 位0到9的數(shù)字表示,例如:信用卡號(hào)碼
1.7、特殊字符表示字符集
1.7.1、“0–9”這個(gè)范圍表示十進(jìn)制數(shù)字,而改用簡(jiǎn)寫(xiě)“\d”表示;
1.7.2、“\w” 可用來(lái)表示整個(gè) 字符數(shù)字的字符集,即相當(dāng)于“A-Za-z0-9_”的簡(jiǎn)寫(xiě)形式;
1.7.3、特殊字符“\s” 代表空白字符。
2、re 模塊: 核心函數(shù)和方法

2.1、匹配對(duì)象 和 group(), groups() 方法
group()方法或者返回所有匹配對(duì)象或是根據(jù)要求返回某個(gè)特定子組。groups()則很簡(jiǎn)單,它返回一個(gè)包含唯一或所有子組的元組。如果正則表達(dá)式中沒(méi)有子組的話(huà), groups() 將返回一個(gè)空元組,而 group()仍會(huì)返回全部匹配對(duì)象。
2.2、用 match()匹配字符串
re.match()函數(shù)嘗試從字符串的開(kāi)頭開(kāi)始對(duì)模式進(jìn)行匹配。如果匹配成功,就返回一個(gè)匹配對(duì)象,而如果匹配失敗了,就返回 None
m = re.match('foo', 'foo')
if m is not None:
? ? m.group()? --->'foo'
2.3、search() 在一個(gè)字符串中查找一個(gè)模式
>>m = re.match('foo', 'seafood') # no match 匹配失敗
>>m = re.search('foo', 'seafood') 匹配到了‘foo’
2.4、匹配多個(gè)字符串( | )
bt = 'bat|bet|bit'
>>m = re.match(bt, 'bat') #匹配失敗
>>m = re.search(bt, 'He bit me!') #匹配成功
2.5、用 findall()找到每個(gè)出現(xiàn)的匹配部分
findall()總返回一個(gè)列表。如果 findall()沒(méi)有找到匹配的部分,會(huì)返回空列表;如果成功找到匹配部分,則返回所有匹配部分的列表(按從左到右出現(xiàn)的順序排列)
正則表達(dá)式僅有一個(gè)子組時(shí),findall()返回子組匹配的字符串組成的列表;如果表達(dá)式有多個(gè)子組,返回的結(jié)果是一個(gè)元組的列表,元組中每個(gè)元素都是一個(gè)子組的匹配內(nèi)容
>>re.findall('car', 'carry the barcardi to the car')
['car', 'car', 'car']
2.6、用 split()分割(分隔模式)
re 模塊和正則表達(dá)式對(duì)象的方法 split()與字符串的 split()方法相似, 前者是根據(jù)正則表達(dá)式模式分隔字符串,后者是根據(jù)固定的字符串分割,
>>> re.split(':', 'str1:str2:str3')
['str1', 'str2', 'str3']