python day5爬蟲基礎之正規表示式2

2022-09-01 01:45:07 字數 2239 閱讀 7618

dot:

'.'匹配任意的字元

'*'匹配任意多個(0到多個) 如圖所示,

程式執行結果是abc,之所以沒有匹配\n,是因為\n是換行符,它就代表這個字串是兩行的,而正規表示式是一行一行去匹配的。在re.match中遇到換行符就預設的認為字串結束了,所以就不會去匹配下一行的內容,因此輸出abc。

dotall:單單表示字串,還可以表示換行符。這樣的話,他就可以匹配整個字串了。如上所示。

caret:中文意思就是拖字型大小,shift+6,

findall,就是找出所有的『abc』,但是在匹配的時候,我們把它當成乙個整體來匹配了,雖然它是兩行,其中『^』表示開始位置,此時如果我們加乙個re.multiline,此時這個『^』就不單單表示字串的開始了,而是表示行的開始,所以遇到換行符後又是乙個新行。程式如下:

『^』表示字串的開始,『$』表示字串的結束,先看程式:

之所以匹配了abc2,沒有匹配abc1,是因為在不加任何flag的情況下,『$』表示的是乙個字串的結束,而不是行的結束,雖然裡邊有個換行符,但是沒有任何的flag。如我我們加上re.multiline,它就代表我們將這個字串,當成多行來處理,那樣的話,執行結果就不得而知了。如下:(\d表示的是數字)

從上可以看出,沒有re.multiline就代表字串的結束,有re.multiline就代表行的結束。

*:前乙個匹配單元的匹配次數,匹配0到多個

+:前乙個匹配單元的匹配次數,匹配1到多個

?:前乙個匹配單元的匹配次數,匹配0到1個

那麼 r』ab*』表示的就是匹配1個a,b可以是0個,也可以是多個,看程式:

這裡補充一下,如果我們在後邊再加上group,就可以將匹配結果列印出來了,如下:

如果我們將*換成+,那就匹配不上了, 那樣就代表1個a,b最少是乙個,看程式:

同理,把+換成?,也是可以匹配的。

接下來,在看一看貪婪和非貪婪(greedy/non-greedy)

先看程式:

.表示任意字元,*表示0到多個,而這樣系統預設是貪婪模式,所以,h 1 > t i t l e < / h 1 全部都當成了任意字元,因為最後邊有個》。其實匹配結果是這樣的,不知這樣寫能不能看懂,朋友們。

還有就是如果最後邊沒有那個『>』,那麼他就認為最後乙個』>』中的紅體部分,執行結果我們也就知道了,如下:

如果此時,我們加乙個?,他就變成非貪婪模式,看程式:

預設的是貪婪模式,要想非貪婪,就要加?

再給大家介紹乙個,表示匹配個數,看程式吧

兩個輸出語句的區別就是乙個有問號,乙個沒有問號,大家應該都明白,帶問號的就是非貪婪模式,而代表匹配2到4個,貪婪模式下,會匹配多的,也就是4個,非貪婪模式下,會匹配少的,也就是2個。

再看看轉義字元』\』,看程式:

如果不加轉義字元『\』,$就會被系統認為是結束字元,加上之後,就會被當成乙個符號來匹配。

最後,再寫個[ ],它就代表集合的意思,就是可以匹配集合裡邊的任意乙個,先看程式:

以上就是今天所學,總結的可能有些不是很細,部分內容可能理解有些不對,還請多多指出,大家共同學習,一起進步,謝謝。

刻意練習Python DAY5

1.python中沒有字元的概念,單位為1的字串就是單個的字元。2.字串的方法及注釋 方法注釋 capitalize 把字串的第乙個字元改為大寫 casefold 把整個字串的所有字元改為小寫 count sub start end 返回 sub 在字串裡邊出現的次數,start 和 end 引數表...

Python day5 模組與包管理

python php模組和包管理 乙個.py檔案就是乙個模組 為了避免命名衝突可以引入上層目錄作為包進行模組管理 作為包的目錄中必須要有名為 init py的檔案 裡面可以是空的 該檔案的模組名就是包名 pycharm中右鍵資料夾標記目錄為根 就可以import不報未找到了 自定義模組 usr bi...

python Day5 函式和lambda表示式

1.函式的定義 def 函式名 參數列 函式體return 表示式 不帶表示式的return相當於返回none 例項 帶變數 輸出如下 welcome runoob width 4 height 5 area 20 引數傳遞 變數沒有型別,只是相當於乙個指標。可更改 mutable 與不可更改 im...