Python 正規表示式 初級高階

2021-10-12 08:35:20 字數 1679 閱讀 6610

1. match和search的區別

match()函式只檢測字串開頭位置是否匹配,匹配成功才會返回結果,否則返回none

search()函式會在整個字串內查詢模式匹配,只到找到第乙個匹配然後返回乙個包含匹配資訊的物件,該物件可以通過呼叫group()方法得到匹配的字串,如果字串沒有匹配,則返回none。

所以,他們之間的最大的區別就是match是從頭開始匹配,search不要求從頭匹配,可以是從中間匹配,不過他們都是只要匹配到就返回

re.match(正規表示式,目標字串)

re.search(正規表示式,目標字串)

2. findall的用法

而findall()函式則是返回所有匹配到的字串,返回的格式是乙個列表,如果沒有匹配就是返回乙個空列表。

re.findall(正規表示式,目標字串)
3. sub的用法

首先,sub的使用方法的格式和前面的三個方法不同,為

re.sub(正規表示式,替換後的字元,待替換的字串)
意思就是將待替換的字串中符合正規表示式的字串替換成第二個引數的值

4. compile的用法

p = re.

compile

(正規表示式)

p.findall(目標字串)

作用就是編譯一句正規表示式,然後儲存正則格式。

可以發現好像沒啥卵用,但是這樣先預編譯的好處就是可以提高效率,當執行正則語句時每次都要執行編譯操作,當操作的次數非常大時,效率很低,如果編譯好了放在記憶體裡,下次直接呼叫就可以,會快很多。

5. r的用法

r的意思是原始字串,英文為(raw string),所有的字串都是按照字面上的意思來使用,不帶有高階語言的特性,是沒有轉義字元和不能列印的字元的。

當然使用的時候為什麼要帶上r,就是因為它可以幫助我們忽略轉義字元帶來的麻煩,目標字串中有幾個"\",我們就帶上幾個"\"就可以了。

windows的檔案目錄裡也有\,如果直接引用位址絕對會報錯或者出問題,但是用r原串就可以了,類似這樣:

r"c:\program files"
6.貪婪以及非貪婪的用法

python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;非貪婪則相反,總是嘗試匹配盡可能少的字元。在"*","?","+",""後面加上?,使貪婪變成非貪婪。

貪婪模式下字串查詢會直接走到字串結尾去匹配,如果不相等就向前尋找,這一過程稱為回溯。

7."()"的用法

在findall裡面,如果在正規表示式裡出現了一部分字串用()包起來,那如果匹配成功,只會返回括號裡面你的內容,而不會返回全部匹配的字串了。相當於將括號裡的值存起來了

rs = re.findall(

"a(b)c"

,"abc"

)

上式只會返回[「b」]

而如果在括號的開頭加上了"?:"

rs = re.findall(

"a(?:b)c"

,"abc"

)

則表示括號中的字串匹配到後不進行儲存,也就相當於沒有括號了,會返回[「abc」]

正規表示式初級使用

一般從 需要匹配的字元 匹配字元的位置 匹配數量 3個方面就能從源串中找到自己想要的字串。如何匹配字元 1 普通字元,直接寫。eg hi,8。2 某種字元 d 匹配數字。w 匹配字母或數字或下劃線或漢字。s 匹配任意的空白。匹配任意字元。3 特殊字元 比如母音字母a,e,i,o,u 表示括號中的某個...

正規表示式高階

或 的小細節 替換匹配 任一側最大的表示式 2.正規表示式和相應編碼 3.正規表示式引擎 舉例簡單說明nfa與dfa工作的區別 比如有字串this is yansen s blog,正規表示式為 ya msen nsen nsem 不要在乎表示式怎麼樣,這裡只是為了說明引擎間的工作區別 nfa工作方...

正規表示式高階

捕獲組就是把正規表示式中子表示式匹配的內容,儲存到記憶體中以數字編號或手動命名的組裡,以供後面引用。表示式 說明 expression 普通捕獲組,將子表示式expression匹配的內容儲存到以數字編號的組裡 expression 命名捕獲組,將子表示式expression匹配的內容儲存到以nam...