本文實(shí)例總結(jié)了Python正則表達(dá)式基本用法。分享給大家供大家參考,具體如下:
正則表達(dá)式在平時(shí)做文本處理(爬蟲程序去解析html中的字段,在分析log文件的時(shí)候需要抓取一些關(guān)鍵數(shù)據(jù))的時(shí)候經(jīng)常會(huì)用到。一般我們會(huì)使用到Python的re庫。如果正則表達(dá)式自己代碼中反復(fù)被用到的時(shí)候,我們可以將這個(gè)正則表達(dá)式使用re.compile函數(shù)轉(zhuǎn)換成一個(gè)object方便調(diào)用。
match
將輸入的字符串從第一個(gè)字符開始匹配,如果不匹配將會(huì)直接返回空。
search
和match不同,search能自由的在字符串中任一開始位置開始匹配,直到匹配上了。
re中的選項(xiàng)
通常在flag里面可以設(shè)置.
re.I 忽略掉大小寫 re.L 讓/w,/W,/b,/B,/s和/S做本地化識(shí)別 re.M 當(dāng)匹配的時(shí)候支持多行匹配. re.DEBUG 顯示正則表達(dá)式的調(diào)試信息 re.S 讓.號(hào)匹配本行的全部字符。
sub 替換
import rephone='188-88-88 # this is my phone number'num = re.sub(r'#.*$','',phone)# num ==188-88-88num = re.sub(r'/D','',phone)# num = 1888888
還能使用這個(gè)來做代碼的轉(zhuǎn)義,有點(diǎn)像在 sublime text里面使用的查找替換。比如說我需要將C語言里面的宏定義轉(zhuǎn)換成lua里面的變量定義
import reprint( re.sub( r'#define/s+([a-zA-Z_]+)/s+([a-zA-Z_0-9]+)', r'_G./1 = /2', '#define MAX_RECV_SIZE 100' ) )#_G.MAX_RECV_SIZE = 100
subn函數(shù)類似,只是能定制替換的次數(shù)。
findall
將匹配到的內(nèi)容返回成一個(gè)數(shù)組,這個(gè)應(yīng)該是比較常用的方法。
print( re.findall( '/d+', '66,88,88,777' ) )# ['66', '88', '88', '777']
finditer
匹配的內(nèi)容以迭代器的方式返回,我們可以對(duì)這個(gè)做循環(huán),返回的時(shí)候MatchObject
for num in re.finditer( '/d+', '66,88,88,777' ): print num.group()'''668888777'''
split
re.split(pattern, string, maxsplit=0, flags=0) >>> re.split(',', 'Words, words, words.')['Words', ' words', ' words.']>>> re.split('/W+', 'Words, words, words.')['Words', 'words', 'words', '']>>> re.split('(/W+)', 'Words, words, words.')['Words', ', ', 'words', ', ', 'words', '.', '']大寫的/W表示了非字串,這個(gè)在語法里面可以查到。如果加了括號(hào),將不會(huì)省略掉匹配到的split的字串。最后這個(gè)在數(shù)組中作為字串分隔符的,.都被保留在數(shù)組中了。
escape
這個(gè)函數(shù)是一個(gè)輔助函數(shù),當(dāng)大量編寫正則表達(dá)式的時(shí)候,可能我們固定的一些字串中包含了正則的保留字串,但是我們不需要讓程序當(dāng)它是re表達(dá)式的時(shí)候,可以使用這個(gè)函數(shù)將字串做轉(zhuǎn)換。
re.escape('1234@gmail.com')# result1234//@gmai//.com            
新聞熱點(diǎn)
疑難解答
圖片精選