目錄
一、什么是正則表達式?
二、re.compile()編譯函數(shù)
三、group()獲取匹配結(jié)果函數(shù)
四、常用匹配規(guī)則
4.1匹配單個字符
4.2匹配前字符次數(shù)
4.3匹配原生字符串
4.4匹配字符串開頭和結(jié)尾
4.5分組匹配
五、re.match()開頭匹配函數(shù)
六、re.search()全文搜索函數(shù)
七、re.findall()查找所有函數(shù)
八、re.sub()與re.subn()查找替換函數(shù)
九、re.split()分割字符串函數(shù)?
十、貪婪模式和非貪婪模式
一、什么是正則表達式?
所謂的正則表達式其實就是一些特殊字符規(guī)則組合。通過這些字符規(guī)則組合開發(fā)者可以檢索并替換出一些符合這種規(guī)則的字符串文本數(shù)據(jù)。
二、re.compile()編譯函數(shù)
可以將包含有正則表達式的字符串編譯成字節(jié)碼。
優(yōu)點:之前每次調(diào)用re.match( )函數(shù)匹配字符串時,python解釋器就會為其頻繁的申請和釋放空間,用來保存其正則表達式字符串。而通過調(diào)用re.complie( )函數(shù),解釋器只需為包含有正則表達式的字符串申請一次內(nèi)存空間就可以了,以后每使用此正則表達式匹配字符串時就可以直接拿來用,而無需重復(fù)頻繁為其申請內(nèi)存空間,從而在很大程度上提高運行效率。
三、group()獲取匹配結(jié)果函數(shù)
groups( )方法的返回值是一個元組,元組中包含正則表達式內(nèi)所有捕獲組()檢索到的字符串。
group()方法用來獲取正則表達式檢索到的字符串。一般在re.match( )的正則表達式實參中一個小括號就是一個捕獲組。
用法:group( 捕獲組0[,捕獲組1][,捕獲組2][......] )
0: 表示獲取正則表達式檢索到的源字符串結(jié)果,這也是默認值。
1: 表示獲取正則表達式中第一個()檢索到的字符串
2: 表示獲取正則表達式中第二個()檢索到的字符串
????以此類推........
?
四、常用匹配規(guī)則
4.1匹配單個字符
.(點):匹配任意一個字符,除了換行符'\n'。
[abc...]:匹配一個字符,此字符可以是a、b或c。也可以寫成范圍[a-z]。
\d:匹配一個數(shù)字,即0~9。
\D:匹配除數(shù)字外的任意一個字符。
\s:匹配一個空格,一個tab鍵相當于2個空格。
\S:匹配除空格或tab鍵之外的任意一個字符。
\w:匹配一個普通字符,即a-z、A-Z、0-9、_
\W:匹配一個非普通字符即特殊字符,如:空格、@、$等
運行結(jié)果:
?
?4.2匹配前字符次數(shù)
* :前一個字符可以匹配0次、1次或多次即任意次。直到不滿足匹配規(guī)則返回之前匹配到的字符串。
+ :前一個字符必須至少匹配1次,否則匹配失敗。
?:前一個字符最多匹配1次或者不匹配返回空字符。
{m} :前一個字符必須精確匹配m次。
{m,} :前一個字符至少匹配m次,直到不滿足匹配規(guī)則結(jié)束。
{mix,max} :前一個字符必須匹配min~max次 即最少匹配min次,最多匹配max次;且不能為負數(shù)。
注意:以上字符需要與前一個字符配合使用即作用于前字符。
? 4.3匹配原生字符串
在許多編程語言中"\"往往表示轉(zhuǎn)義字符,如:\n表示換行、\t表示tab鍵;為了表示"\"本身需要再加一個\ ,形成”\\“格式?;蛘咴谧址那懊婕印皉"字符:表示按肉眼看到的字符串原意檢索。
4.4匹配字符串開頭和結(jié)尾
^str? :表示字符串開頭,即匹配以str開頭的字符串
[^a]? :此時“^”表示取反,即匹配除字母a的任意一個字符
str$? :表示字符串結(jié)尾,即匹配字符串的結(jié)尾即檢索的目標字符串必須以str結(jié)尾
4.5分組匹配
str1|str2? : 表示從左到右分別匹配str1或str2的正則字符串表達式。一旦有一方匹配成功則返回結(jié)果值。
(ab)? :表示將括號中正則表達式匹配到的結(jié)果作為一個分組。即在正則表達式參數(shù)中一個括號代表一個分組。
\num? : 表示引用正則表達式前面括號分組num匹配到的字符串。
(?P<name>) :表示給正則表達式的分組起別名。
(?P=name) :表示引用前面正則表達式分組別名name所匹配到的字符串。
五、re.match()開頭匹配函數(shù)
re.match()函數(shù)只能匹配字符串的開頭。如果要匹配的正則表達式字符串不在原字符串的開頭則匹配不成功返回值None;匹配成功返回re.match類對象。
用法:re.match(pattern,string,flags)
pattern:?要匹配的正則表達式
string: 要檢索的源字符串文本
flags:? 標志位,用來控制正則表達式的匹配方式,如: re.I表示忽略大小寫,re.M表示多行匹配,re.S使正則表達式中“.”的匹配包括換行符\n在內(nèi)任意一個字符等等。
六、re.search()全文搜索函數(shù)
從全文中從前往后搜索指定字符串,一旦找到則立即返回搜索到的對象。
用法:re.search(pattern,dest, flags)
pattern:? 正則表達式字符串
dest:? 要對其搜索的文本字符串
flags:? 標志位。re.I忽略大小寫,re.M多行匹配
?說明:span=(14,19)表示匹配到的字符串在源文本中的下標位置,不包含19。
七、re.findall()查找所有函數(shù)
用法:re.findall(pattern,dest_str,flags)
pattern:? 正則表達式字符串
dest_str:? 要對其搜索的文本字符串
flags:? 控制正則表達式匹配方式。re.I忽略大小寫,re.M多行匹配
八、re.sub()與re.subn()查找替換函數(shù)
re.sub( )函數(shù): 將文本字符串中正則表達式查找到的字符串替換為指定的字符串后并返回。
用法:re.sub(pattern,sub,dest_str,counts=0,flags)
pattern: 匹配模式即正則表達式
sub:? 替換為的字符串
dest_str: 要替換的文本字符串
counts:? 替換的最大次數(shù),默認為0表示替換全部
flags:控制正則表達式匹配方式
?說明: re.subn( )函數(shù)與re.sub( )函數(shù)的功能一樣。只不過在以元組的形式返回替換后的文本字符串時,還會包含原文被替換的字符串個數(shù)。
九、re.split()分割字符串函數(shù)?
以文本字符串中的某個字符作為分割符,實現(xiàn)對文本字符串的分割并以列表的形式返回分割后的文本字符串。
用法:re.split(pattern, dest_str, max_split, flags)
pattern:? 分割符
dest_str:? 要分割的文本字符串
max_split:? 最大分割數(shù)。默認為0表示無限制
flags:? 設(shè)置正則表達式匹配的方式。
十、貪婪模式和非貪婪模式
貪婪模式:在滿足正則規(guī)則的情況下盡可能多的匹配字符
非貪婪模式: 在滿足正則規(guī)則的情況下盡可能少的匹配字符
在python正則表達式的數(shù)量匹配字符中默認是貪婪模式,如果想將正則表達式的匹配變?yōu)榉秦澙纺J街恍柙跀?shù)量匹配字符的后面加上?如:"*",“+”,“?”,{min,max}
文章來源:http://www.zghlxwxcb.cn/news/detail-685175.html
@聲明:“山月潤無聲”博主知識水平有限,以上文章如有不妥之處,歡迎廣大IT愛好者指正,小弟定當虛心受教!文章來源地址http://www.zghlxwxcb.cn/news/detail-685175.html
到了這里,關(guān)于Python爬蟲基礎(chǔ)之正則表達式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!