python爬蟲學習2 正規表示式

2021-06-26 22:05:07 字數 3311 閱讀 1249

正規表示式我感覺是爬蟲的難點與關鍵,看各種文章學習乙個晚上後,總結如下

"."  表任意字元

"^ " 表string起始

"$" 表string 結束

「*」 「+」 「?」  跟在字元後面表示,0個——多個, 1個——多個, 0個或者1個

*?, +?, ??  符合條件的情況下,匹配的盡可能少//限制*,+,?匹配的貪婪性

匹配此前的字元,重複m次

m到n次,m,n可以省略

舉個例子 『a.*b』 表示a開始,b結束的任意字串

a  匹配連續5個a

表一系列字元  [abcd] 表a,b,c,d  [^a] 表示非a

|  a|b 表示a或者b , ab為任意的正規表示式  另外|是非貪婪的如果a匹配,則不找b

(…)  這個括號的作用要結合例項才能理解, 用於提取資訊

/d  [0-9]

/d  非 /d

/s  表示空字元

/s  非空字元

/w  [a-za-z0-9_]

/w  非 /w

一:re的幾個函式

1: compile(pattern, [flags]) 

根據正規表示式字串 pattern 和可選的flags 生成正規表示式 物件

生成正規表示式 物件(見二)

其中flags有下面的定義:

i  表示大小寫忽略

l  使一些特殊字符集,依賴於當前環境         

m  多行模式 使 ^ $ 匹配除了string開始結束外,還匹配一行的開始和結束

s  「.「 匹配包括『/n』在內的任意字元,否則 . 不包括『/n』  

u  make /w, /w, /b, /b, /d, /d, /s and /s dependent on the unicode character properties database    

x 這個主要是表示,為了寫正規表示式,更可毒,會忽略一些空格和#後面的注釋

其中s比較常用,

應用形式如下

import re

re.compile(……,re.s)

2: match(pattern,string,[,flags])

讓string匹配,pattern,後面分flag同compile的引數一樣

返回matchobject 物件(見三)

3: split( pattern, string[, maxsplit = 0]) 

用pattern 把string 分開

>>> re.split('/w+', 'words, words, words.')

['words', 'words', 'words', '']

括號『()』在pattern內有特殊作用,請查手冊

4:findall( pattern, string[, flags]) 

比較常用,

從string內查詢不重疊的符合pattern的表示式,然後返回list列表

5:sub( pattern, repl, string[, count]) 

repl可以時候字串,也可以式函式

當repl是字串的時候,

就是把string 內符合pattern的子串,用repl替換了

當repl是函式的時候,對每乙個在string內的,不重疊的,匹配pattern

的子串,呼叫repl(substring),然後用返回值替換substring

>>> re.sub(r'def/s+([a-za-z_][a-za-z_0-9]*)/s*/(/s*/):',

...        r'static pyobject*/npy_/1(void)/n', dashrepl, 'pro----gram-files')

'pro--gram files'

二:正規表示式物件 (regular expression objects )

產生方式:通過 re.compile(pattern,[flags])回

match( string[, pos[, endpos]]) ;返回string[pos,endpos]匹配

pattern的matchobject(見三)

split( string[, maxsplit = 0]) 

findall( string[, pos[, endpos]])   

sub( repl, string[, count = 0]) 

這幾個函式和re模組內的相同,只不過是呼叫形式有點差別

re.幾個函式和 正規表示式物件的幾個函式,功能相同,但同一程式如果

多次用的這些函式功能,正規表示式物件的幾個函式效率高些

三:matchobject

通過 re.match(……) 和 re.compile(……).match返回

該物件有如下方法和屬性:

方法:group( [group1, ...]) 

groups( [default]) 

groupdict( [default]) 

start( [group]) 

end( [group]) 

說明這幾個函式的最好方法,就是舉個例子

matchobj = re.compile(r"(?p/d+)/.(/d*)")

m = matchobj.match('3.14sss')

#m = re.match(r"(?p/d+)/.(/d*)", '3.14sss')

print m.group()

print m.group(0)

print m.group(1)

print m.group(2)

print m.group(1,2)

print m.group(0,1,2)

print m.groups()

print m.groupdict()

print m.start(2)    

print m.string

輸出如下:    

3.14               

3.14               

3                  

14                 

('3', '14')        

('3.14', '3', '14')

('3', '14')        

2                  

3.14sss

所以group() 和group(0)返回,匹配的整個表示式的字串

另外group(i)  就是正規表示式中用第i個「()」 括起來的匹配內容

('3.14', '3', '14')最能說明問題了。

爬蟲學習筆記 2 正規表示式

在爬蟲學習中,經常會用到正規表示式去匹配網頁源 中的特定字串,例如網頁鏈結,標題等相關資訊。在處理這類問題上,正規表示式可以說是一大利器。當然在python中還有類似的較為簡單的方法處理這類問題,比如beautifulsoup,pyquery,xpath等相應的庫,當這些庫失靈的時候,兜兜轉轉回到最...

python網路爬蟲學習筆記之之正規表示式

1.表達很多字串 可以直接使用乙個正規表示式 2.表達無窮多個字串時 比如 py 就表示p後邊跟乙個y或者無窮多個y時的情況 3.比如一組字串有某種特點,很難將它們列舉出來就可以使用正規表示式來進行 比如說 一組字串需要以 py 開頭 後續存在不多於10個字串,後續字串不得出現 p 或者 y 當然你...

python正則表達學習

python替換 主要是利用 python 的正則表達,python的正則表達功能比較強大。我就介紹下我經常用的幾個方法。可能說的詳細,如果要深入研究的話。還是 要去看下python的文件了.廢話不多說。馬上開始介紹 一般我會用re.compile來建立乙個正則物件。python 文件上介紹好象這個...