正則表達式一般用于檢索,替換文本。
一.正則表達式元字符和語法:

這些語法是每種語言都通用的。接下來記一下python提供的正則表達式操作函數(shù)。
二. Python提供的正則表達式處理函數(shù)
(1)re.match
re.match的函數(shù)原型為:re.match(pattern, string, flags)
第一個參數(shù)是正則表達式,如果匹配成功,則返回一個Match,否則返回一個None;
第二個參數(shù)表示要匹配的字符串;
第三個參數(shù)是標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。
例:

該程序匹配字符串text的第一個單詞。print結(jié)果如下:

程序第一行導(dǎo)入re模塊。第三行中(\w+)為正則表達式第一個分組。意思為匹配單詞字符一次或無限次。整個表達式(\w+)\s的意思是匹配一個空格及其前面的單詞字符一次或無限次。也就是匹配第一個單詞。
程序第5行的group(0)和group()一個意思,都是引用整個正則表達式。group(1)引用的是第一個括號里的正則表達式。在本例中g(shù)roup(0)和group(1)結(jié)果相同。關(guān)于group的用法更多參考:wiki.ubuntu.org.cn/Python正則表達式操作指南
(2)re.search
re.search函數(shù)會在字符串內(nèi)查找模式匹配,只到找到第一個匹配然后返回,如果字符串沒有匹配,則返回None。
re.search的函數(shù)原型為: re.search(pattern, string, flags)
每個參數(shù)的含意與re.match一樣,也是只返回一個匹配結(jié)果。
re.match與re.search的區(qū)別:re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數(shù)返回None;而re.search匹配整個字符串,直到找到一個匹配。
例:

第三行的正則表達式 \shan(ds)ome\s 中,首尾\s為匹配空格,(ds)為第一個分組。group(0)為匹配handsome這個單詞以及首位的空格。group(1)匹配ds這兩個字符。返回結(jié)果為:

(3)re.sub
re.sub用于替換字符串中的匹配項。
re.sub的函數(shù)原型為:re.sub(pattern, repl, string, count)
其中第二個函數(shù)是替換后的字符串;第四個參數(shù)指替換個數(shù)。默認為0,表示每個匹配項都替換。
re.sub還允許使用函數(shù)對匹配項的替換進行復(fù)雜的處理。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);將字符串中的空格' '替換為'[ ]'。
例:

第3行的 \s+為匹配空格一次或無限次,然后將空格替換為 -?
輸出結(jié)果為:JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...
(3)re.split
可以使用re.split來分割字符串,如:re.split(r'\s+', text);將字符串按空格分割成一個單詞列表。
例:

輸出結(jié)果為一個列表:['JGood', 'is', 'a', 'handsome', 'boy,', 'he', 'is', 'cool,', 'clever,', 'and', 'so', 'on...']
(4)re.findall
re.findall可以獲取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);獲取字符串中,包含'oo'的所有單詞。例:

輸出結(jié)果為列表:['JGood', 'cool']
(5)re.compile
可以把那些經(jīng)常使用的正則表達式編譯成正則表達式對象,這樣可以提高一定的效率。下面是一個正則表達式對象的一個例子:

第3行的\w*oo\w* 為匹配含oo這兩個字符的單詞。第4行為匹配出所有含oo的單詞。第5行為給所有匹配到的單詞加上[ ],輸出結(jié)果為:
['JGood', 'cool']
[JGood] is a handsome boy, he is [cool], clever, and so on...