正則表達(dá)式
正則表達(dá)式(regular expression)是可以匹配文本片段的模式。正則表達(dá)式并不是一個(gè)程序,而是用于字符串處理的一種模式。
re 模塊
在Python中求厕,我們可以使用內(nèi)置的re模塊來使用正則表達(dá)式。
有一點(diǎn)需要特別注意扰楼,正則表達(dá)式使用\對(duì)特殊字符進(jìn)行轉(zhuǎn)義呀癣,比如,為了匹配字符串 ‘python.org’弦赖,我們需要使用正則表達(dá)式?'python\.org'项栏,而 Python 的字符串本身也用?\?轉(zhuǎn)義,所以上面的正則表達(dá)式在 Python 中應(yīng)該寫成?'python\\.org'蹬竖,這會(huì)很容易陷入?\?的困擾中沼沈,因此,我們建議使用 Python 的原始字符串案腺,只需加一個(gè) r 前綴庆冕,上面的正則表達(dá)式可以寫成:
r'python\.org'
re模塊提供了不少有用的函數(shù),用以匹配字符串劈榨,比如:
1 compile函數(shù)
2 match 函數(shù)
3 search 函數(shù)
4 findall 函數(shù)
5 finditer 函數(shù)
6 split 函數(shù)
7 sub 函數(shù)
8 subn 函數(shù)
一? 使用compile函數(shù)將正則表達(dá)式的字符串形式編譯為一個(gè)Pattern對(duì)象
二? 通過Pattern對(duì)象提供一系列的方法對(duì)文本進(jìn)行匹配查找访递,獲取匹配結(jié)果(一個(gè)Match對(duì)象)
三? 最后使用Match對(duì)象提供的屬性和方法獲取信息,根據(jù)需要進(jìn)行其他操作
Compile 函數(shù)
compile函數(shù)用于編譯正則表達(dá)式同辣,生成一個(gè)Pattern對(duì)象拷姿,它的一般使用形式如下:
1? re.compile(pattern[, flag])
其中,pattern是一個(gè)字符串形式的正則表達(dá)式旱函,flag是一個(gè)可選參數(shù)响巢,表示匹配模式,比如忽略大小寫棒妨,多行模式等踪古。
import re
pattern = re.compile(r'\d+')
在上面,我們已將一個(gè)正則表達(dá)式編譯成Pattern對(duì)象券腔,接下來伏穆,我們就可以利用Pattern的一系列方法對(duì)文本進(jìn)行匹配查找了。Pattern對(duì)象的一些常用方法組要有:
match方法
search方法
findall方法
finditer方法
split方法
sub方法
subn方法
match方法
match方法用于查找字符串的頭部(也可以指定其實(shí)位置)纷纫,它是一次匹配枕扫,只要找到一個(gè)匹配結(jié)果就返回,而不是查找所有匹配的結(jié)果辱魁。它的一般使用形式如下:
1 match(string[, pos[, endpos]])
其中烟瞧, string是帶匹配的字符串诗鸭,pos和endpos是可選參數(shù),指定字符串和起始和終點(diǎn)位置参滴,默認(rèn)值分別是0 很len强岸,因此當(dāng)你不指定pos和endpos時(shí), match方法默認(rèn)匹配字符串的頭部卵洗。
當(dāng)匹配成功時(shí)请唱, 返回一個(gè)Match對(duì)象,如果沒有匹配上过蹂,則返回None十绑。
在上面,當(dāng)匹配成功時(shí)返回一個(gè)Match對(duì)象酷勺,其中:
group([group1, ...])方法用于獲取一個(gè)或多個(gè)分組匹配的字符串本橙,當(dāng)要獲得整個(gè)匹配的字串時(shí),可直接使用group()或group(0);
start([group])方法用于獲取分組匹配的子串在整個(gè)字符串中的起始位置(字串第一個(gè)字符的索引)脆诉,參數(shù)默認(rèn)值為0甚亭;
end([group])方法用于獲取子串的結(jié)束位置
span([group]) 方法返回(start(group), end(group))
search方法
search方法用于查找字符串的任何位置,它也是一次匹配击胜,只要找到了一個(gè)匹配結(jié)果就返回亏狰,而不是查找所有的匹配結(jié)果,它的一般使用形式如下:
1偶摔, search(string[, pos[, endpos]])
其中暇唾, string是待匹配的字符串, pos和endpos是可選參數(shù)辰斋,指定字符串的起始和終點(diǎn)位置策州,默認(rèn)值為0和len。
當(dāng)匹配成功的時(shí)候返回一個(gè)match對(duì)象宫仗, 如果沒成功够挂,返回None
findall方法
search和match方法只匹配一次,只要找到一個(gè)匹配的結(jié)果就返回藕夫。然而孽糖,在大多數(shù)時(shí)候,我們需要搜索整個(gè)字符串毅贮,獲取所有匹配的結(jié)果梭姓。
findall方法的使用形式如下:
1,findall(string[, pos[, endpos]])
匹配返回是一個(gè)列表嫩码。如果沒有匹配,則返回一個(gè)空列表
split方法
split方法按照能夠匹配的字串將字符串分割后返回列表罪既,它的使用形式如下:
1 split(string[, maxsplit])
其中铸题, maxsplit用于指定最大分割次數(shù)铡恕,不指定是將其全部分割。
sub 方法
sub方法用于替換丢间。他的使用形式如下:
1 sub(repl, string[, count])
其中一個(gè)repl是字符串探熔,則會(huì)使用