python使用正則表達(dá)式(Regular Expression)方法超詳細(xì)
一、導(dǎo)入re庫(kù)
python使用正則表達(dá)式要導(dǎo)入re庫(kù)。
import re
在re庫(kù)中。正則表達(dá)式通常被用來檢索查找、替換那些符合某個(gè)模式(規(guī)則)的文本。
二、使用正則表達(dá)式步驟
1、尋找規(guī)律;
2、使用正則符號(hào)表示規(guī)律;
3、提取信息,如果每一個(gè)字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
三、正則表達(dá)式中常見的基本符號(hào)
1.點(diǎn)號(hào)“.”
一個(gè)點(diǎn)號(hào)可以代替除了換行符(\n)以外的任何一個(gè)字符,包括但不限于英文字母、數(shù)字、漢字、英文標(biāo)點(diǎn)符號(hào)和中文標(biāo)點(diǎn)符號(hào)。
2.星號(hào)“*”
一個(gè)星號(hào)可以表示它前面的一個(gè)子表達(dá)式(普通字符、另一個(gè)或幾個(gè)正則表達(dá)式符號(hào))0次到無限次。
3.問號(hào)“?”
問號(hào)表示它前面的子表達(dá)式0次或者1次。注意,這里的問號(hào)是英文問號(hào)。
4.反斜杠“\”
反斜杠在正則表達(dá)式里面不能單獨(dú)使用,甚至在整個(gè)Python里都不能單獨(dú)使用。反斜杠需要和其他的字符配合使用來把特殊符號(hào)變成普通符號(hào),把普通符號(hào)變成特殊符號(hào)。如:“\n”。
5.?dāng)?shù)字“\d”
正則表達(dá)式里面使用“\d”來表示一位數(shù)字。再次強(qiáng)調(diào)一下,“\d”雖然是由反斜杠和字母d構(gòu)成的,但是要把“\d”看成一個(gè)正則表達(dá)式符號(hào)整體。
6.小括號(hào)“()”
小括號(hào)可以把括號(hào)里面的內(nèi)容提取出來。
四、常見的正則表達(dá)式舉例
1. .*?(匹配所有內(nèi)容)
例如:'<title>(.*?)</title>' 將網(wǎng)頁(yè)的標(biāo)題爬取下來。
2、\w 單詞字符[A-Za-z0-9_], "+" 匹配前一個(gè)字符1次或無限次 例如:一個(gè)人的郵箱是這樣的lixiaomei@qq.com,那么我們?nèi)绾螐囊淮蠖训淖址阉崛〕鰜砟兀?nbsp;
pattern: \w+@\w+\.com
思考:若郵箱為hello123@heuet.edu.com,如何匹配?
pattern:\w+@(\w+\.)?\w+\.com
?代表了匹配0次或者1次括號(hào)分組內(nèi)的匹配內(nèi)容,"()"則表示被括內(nèi)容是一個(gè)分組,分組序號(hào)從pattern字符串起始往后依次排列。因?yàn)槭瞧ヅ?次或1次,那么就意味著括號(hào)內(nèi)的部分是可有可無的,所以這個(gè)pattern就可能匹配以上兩種郵箱格式。
擴(kuò)展: \w+@(\w+\.)*\w+\.com 模式就更厲害了," * " 可以匹配0次或無限次。
五、re庫(kù)的核心函數(shù)
1、compile()函數(shù) (可有可無)
- 函數(shù)定義: compile(pattern, flag=0)
 - 函數(shù)描述:編譯正則表達(dá)式pattern,然后返回一個(gè)正則表達(dá)式對(duì)象。
 
為什么要對(duì)pattern進(jìn)行編譯呢?《Python核心編程》里面是這樣解釋的:
使用預(yù)編譯的代碼對(duì)象比直接使用字符串要快,因?yàn)榻忉屍髟趫?zhí)行字符串形式的代碼前都必須把字符串編譯成代碼對(duì)象。
2、match()函數(shù)
- 函數(shù)定義: match(pattern, string, flag=0)
 - 函數(shù)描述:只從字符串的最開始與pattern進(jìn)行匹配,匹配成功返回匹配對(duì)象(只有一個(gè)結(jié)果),否則返回None。
 
問題來了,為什么result1結(jié)果有這么多的東西啊?貌似最后一個(gè)才是要匹配的對(duì)象。這個(gè)要怎么提取出來呀?
別著急,我們現(xiàn)在得到的是匹配對(duì)象,需要用一定的方法提取,后面會(huì)在《匹配對(duì)象的方法》章節(jié)來解決這個(gè)問題,繼續(xù)往下看。
3、search()函數(shù)
- 函數(shù)定義: search(pattern, string, flag=0)
 - 函數(shù)描述:與match()工作的方式一樣,但是search()不是從最開始匹配的,而是從任意位置查找第一次匹配的內(nèi)容。如果所有的字串都沒有匹配成功,返回None,否則返回匹配對(duì)象。
 
4、findall()函數(shù)
- 函數(shù)定義: findall(pattern, string [,flags])
 - 函數(shù)描述:查找字符串中所有出現(xiàn)的正則表達(dá)式模式,并返回一個(gè)匹配列表
 
上面同時(shí)列出了match、search、findall三個(gè)函數(shù)用法。findall與match和search不同的地方是它會(huì)返回一個(gè)所有無重復(fù)匹配的列表。如果沒找到匹配部分,就返回一個(gè)空列表。六、匹配對(duì)象的方法(提?。?/p>
以上re模塊函數(shù)的返回內(nèi)容可以分為兩種:
- 返回匹配對(duì)象:就是上面如 <_sre.SRE_Match object; span=(0, 5), match='12345'>這樣的對(duì)象,可返回匹配對(duì)象的函數(shù)有match、search、finditer。
 - 返回一個(gè)匹配的列表:返回列表的就是 findall。
 
因此匹配對(duì)象的方法只適用match、search、finditer,而不適用與findall。
常用的匹配對(duì)象方法有這兩個(gè):group、groups、還有幾個(gè)關(guān)于位置的如 start、end、span就在代碼里描述了。
1、group方法
- 方法定義:group(num=0)
 - 方法描述:返回整個(gè)的匹配對(duì)象,或者特殊編號(hào)的字組
 
再看下面的實(shí)例:
這里就需要用到我們之前提到的分組概念。
分組的意義在于:我們不僅僅想得到匹配的整個(gè)字符串,我們還想得到整個(gè)字符串里面的特定子字符串。如上例中,整個(gè)字符串是“我12345+abcde”,但是想得到 “abcde”,我們就可以用()括起來。因此,你可以對(duì)pattern進(jìn)行任何的分組,提取你想得到的內(nèi)容。
2、groups方法
- 方法定義:groups(default =None)
 - 方法描述:返回一個(gè)含有所有匹配子組的元組,匹配失敗則返回空元組
 
七、re模塊的屬性(flag)
re模塊的常用屬性有以下幾個(gè):
- re.I: 匹配不分大小寫;(常用)
 - re.L: 根據(jù)使用的本地語(yǔ)言環(huán)境通過\w, \W, \b, \B, \s, \S實(shí)現(xiàn)匹配;
 - re.M: ^和$分別匹配目標(biāo)字符串中行的起始和結(jié)尾,而不是嚴(yán)格匹配整個(gè)字符串本身的起始和結(jié)尾;
 - re.S: “.”(點(diǎn)號(hào))通常匹配除了\n(換行符)之外的所有單個(gè)字符,該標(biāo)記表示“.”(點(diǎn)號(hào))能夠匹配全部字符;(常用)
 - re.X: 通過反斜線轉(zhuǎn)義,否則所有空格加上#(以及在該行中所有后續(xù)文字)都被忽略,除非在一個(gè)字符類中或者允許注釋并且提高可讀性;
 
注意:
如果我們定義了compile編譯,需要先將flag填到compile函數(shù)中,否則填到匹配函數(shù)中會(huì)報(bào)錯(cuò); 如果沒有定義compile,則可以直接在匹配函數(shù)findall中填寫flag。
附錄:
正則表達(dá)式中語(yǔ)法一覽表
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Python正則表達(dá)式急速入門(小結(jié))
欄 目:正則表達(dá)式
本文標(biāo)題:python使用正則表達(dá)式(Regular Expression)方法超詳細(xì)
本文地址:http://www.jygsgssxh.com/a1/zhengzebiaodashi/11115.html
您可能感興趣的文章
- 01-11正則表達(dá)式實(shí)現(xiàn)添加、刪除、替換三種功能
 - 01-11python 用正則表達(dá)式篩選文本信息的實(shí)例
 - 01-11正則表達(dá)式之匹配數(shù)字范圍
 - 01-11python爬蟲正則表達(dá)式之處理?yè)Q行符
 - 01-11正則表達(dá)式匹配路由的實(shí)現(xiàn)代碼
 - 01-11正則表達(dá)式截取身份證號(hào)碼加密的方法
 - 01-11js正則表達(dá)式 匹配兩個(gè)特定字符間的內(nèi)容示例
 - 01-11MySQL使用正則表達(dá)式進(jìn)行查詢操作經(jīng)典實(shí)例總結(jié)
 - 01-11python正則表達(dá)式之對(duì)號(hào)入座篇
 - 01-11詳解正則表達(dá)式實(shí)現(xiàn)二代身份證號(hào)碼驗(yàn)證
 


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
 - 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
 - 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語(yǔ)言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 01-11正則表達(dá)式實(shí)現(xiàn)添加、刪除、替換三
 - 01-11正則表達(dá)式之匹配數(shù)字范圍
 - 01-11python 用正則表達(dá)式篩選文本信息的實(shí)
 - 01-11正則表達(dá)式匹配路由的實(shí)現(xiàn)代碼
 - 01-11python爬蟲正則表達(dá)式之處理?yè)Q行符
 - 01-11js正則表達(dá)式 匹配兩個(gè)特定字符間的
 - 01-11正則表達(dá)式截取身份證號(hào)碼加密的方
 - 01-11python正則表達(dá)式之對(duì)號(hào)入座篇
 - 01-11MySQL使用正則表達(dá)式進(jìn)行查詢操作經(jīng)典
 - 01-11詳解正則表達(dá)式實(shí)現(xiàn)二代身份證號(hào)碼
 
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
 - 01-10delphi制作wav文件的方法
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 01-10C#中split用法實(shí)例總結(jié)
 - 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
 


