讀 《精通正規表示式》

2021-09-19 04:27:53 字數 3010 閱讀 7109

剛學完python就像找點事做,相到以後的自己打算的方向就準備從爬蟲開始學習,爬蟲前面學的好好,但越到後面遇到的正規表示式越看不懂,相比那些函式,這個讓人難以琢磨,與其一直帶著這種異或我打算在學爬蟲之餘好好的學習一下正規表示式,因此我們選擇了這本書。

我將記錄我的學習筆記,下面就開始學習之路。

re模組

1.什麼是re ,正規表示式作為乙個相對通用的語言,在python中也有對正規表示式的支援,那就是python內建的re模組,re模組則是運用正規表示式來提供一系列功能強大的介面讓我們來呼叫。

先關函式:

findall(pattern,string, flag=0)

match和search均用於匹配單值,即:只能匹配字串中的乙個,如果想要匹配到所有符合條件的元素,則需要使用findall。

findall獲取分重複的匹配列表;==如果有乙個組則以列表的形式返回,且每乙個匹配均是字串;如果模型中有多個組,則以列表的形式返回,且每乙個匹配均是元組,空的匹配也會包含在結果中。這裡的模型可以當做是正規表示式.

compile()

python**最終會被編譯為位元組碼,之後才被解釋執行。在模式匹配之前,正規表示式必須被編譯成regex對線,預先編譯可以提高效能,

group()與groups()

匹配物件的兩個主要方法:

group() 返回所有匹配物件,或則返回某個特定的子組,返回全部匹配物件。

groups() 返回乙個包含唯一或所有組的元組,如果沒有子組,返回空元組。

「^」和「$」可以認為是最好理解的元字元了," ^ "代表的是一行的開始,「 $」 代表的是一行的結束,

關於語句的理解:「^cat」匹配的是以c作為一行的第乙個字元,緊接乙個a,緊接著乙個t的文字。

「^cat $」匹配條件是:行開頭(顯然,每一行都有乙個開頭),然後是字母cat,然後是行末尾。

1.匹配若干字元之一

如果乙個字串的乙個位置有對個選擇這時候就可以使用正規表示式結構體「[…]」。它容許使用者列出在某處期望匹配的字元,通常被稱作字元組。「gr[ea]r」的意思是:先找到乙個g,跟著是乙個r,然後是乙個a或者是e,最後是乙個y。(字元組的內容是在同乙個位置匹配的若干字元,所以它的意思是「或」)。

2.在字元內部,字元組元字元『-』(連字元)表示乙個範圍:「h[1-6]」,「h[123456]」是完全一樣的。「[0-9]」,「[a-z]」是常用的匹配數字和小寫字母的簡便方式。多重範圍也是允許的。「[0-9a-fa-f]」可以表示:「[0123456789abcdefabcdef]」。

並且字元組也可以和普通的文字結合在一起例如:「[0-9a-z_!.?]」(能夠匹配乙個數字,大寫字母,下劃線,驚嘆號,點號,或者是問號)。

這裡要注意:只有在字元組內部連字元「-」才是元字元——否者他就只能匹配普通的連字符號,如果他在字元組的最前面也相當於乙個普通的字元。

問號和點號通常被當作元字元處理,但在字元中則不是這樣([0-9a-z_!.?])裡面真正特殊的就哪兩個連字元。

用『[ ^…]』,這個字元組就會表示匹配任何未列出的字元。例如『[ ^1-6]』,匹配除了1到6以外的任何字元,

元字元『.』用來匹配任意字元的字元陣列的簡便寫法。

如果我們需要搜尋『03/19/76,03-19-76,03.19.76』,可以用『03[-./]19[-./]76』。也可以簡單地嘗試『03.19.76』 前者的點號並不是元字元,因為他們在字元陣列內部。(在字元陣列裡面和外面,元字元的定義和意義是不一樣的)。這裡的連字元同樣也不是元字元,因為他們都緊接著』["

或則「 [ ^ 」之後。如果連字元不在字元組的開頭,例如" [.-/]",就是用來表示範圍的,在本例中就是錯的用法。

單詞分解符

在python中:

\b 匹配單詞邊界,邊界上會匹配空格或起始行,實際匹配的是零寬度的不存在的東西。

\b 匹配非單詞邊界,即\b取反,例如,\be\b不會匹配字母e兩邊的字元,但會識別e兩邊的字元,但會識別e兩邊是否是非單詞邊界(即但不會將邊界返回到匹配結果)

import re

string =

'the the8e89ory9'

zhengze = r"\bthe\b"

str1 = re.

compile

(zhengze)

.findall(string)

print

(str1)

#本來python字串就是通過「\」來轉意的,所以這裡要想用到「\b」就不能讓字串中的\b轉意,使用raw原生字串

#或者是在"\b"前面在加上乙個『\b』

有乙個重要問題我們也會經常遇到,有一些我們經常見到的網域名稱大致如:「***x.***.yyy」,如果正規表示式寫為:「\w+.\w+.\w+」那麼匹配結果往往不盡人意因為正規表示式中的 『.』是元字元,可以匹配除換行符以外的任何字元。

而真正匹配文字中點號的元序列應該是反斜線加上點號的組合即:『.』稱為轉意的點號或者「轉義的句號」。同樣的如果想要匹配乙個括號「()」。

從巨集觀的角度看,乙個正規表示式要麼能夠匹配給定文字中的某些字元,要麼不能匹配。在編寫正規表示式的時候,我們必須進行權衡;匹配符號要求的文字,同時忽略不符合要求的文字。

在任何語言中,經驗都十分的重要,編寫正規表示式時,按照預期獲得成功的匹配要花去一半的功夫,另一半的功夫用來考慮如何忽略那麼些不符合要求的文字。

許多程式設計都有識別符號的概念,識別符號只包含字母,數字,以及下畫線,不能以數字開頭。『[ a-za-z_ ] [a-za-z_0-9]』。

引號內的字元最簡單的辦法是使用這個表達:「"[^]"」。

$[0-9]+(.[ 0-9][0-9]?)是一種匹配美元金額的辦法。

前面已經看過\b表示退格,\t時候製表符,而\s則能表示所有的「空白字元」的字元組,其中包括空格符,製表符,換行符(親測)和回車符。

\s任何空白字元

\s除\s之外的任何的字元

\w[a-za-z0-9]

\w除\w之外的任何字元,也就是[ ^a- za-z0-9]

\d[0-9]

\d除\d之外的任何字元

精通正規表示式

我只看了前面兩三章 這書的核心是4 5 6章 精通正規表示式 這本書的第四章和第六章比較值得看 1.多選結構 mm gg 表示匹配 mm 或 gg 2.忽略大小寫 s source dest i 搜尋source,將其替換為dest,此處的i只對source起作用,而不會作用於dest。3.單詞分界...

精通正規表示式 1 正規表示式入門

1 能檢查多個檔案,挑出包含重複單詞的行,高亮標記每個重複單詞 使用標準ansi的轉義字元列 同時必須顯示這行文字來自哪個檔案。2 能跨行查詢,即使兩個單詞乙個在某行末尾而另乙個在下一行的開頭,也算重複單詞。3 能進行不區分大小寫的查詢,例如 the the.重複單詞之間可以出現任意數量的空白字元 ...

《精通正規表示式》筆記

1.多選結構 mm gg 表示匹配 mm 或 gg 2.忽略大小寫 s source dest i 搜尋source,將其替換為dest,此處的i只對source起作用,而不會作用於dest。3.單詞分界符 用來匹配單詞的開始 用來匹配單詞的結束 比如 cat 匹配以 cat 結尾的單詞,如scat...