python爬蟲之正則表達(dá)

python爬蟲之正則表達(dá)

概述

這部分主要講的是python中的re模塊跟磨。

最簡(jiǎn)單的正則表達(dá)就是普通字符串的匹配,即字符串‘a(chǎn)bcd’匹配字符串‘a(chǎn)bcd’。

通配符

正則表達(dá)式可以匹配多個(gè)字符,比如點(diǎn)號(hào) . 可以匹配任何字符,這類統(tǒng)稱通配符涛目。

特殊字符的轉(zhuǎn)義

比如需要匹配“python.org”秸谢,可以使用‘python.org’,但可能會(huì)匹配到別的字符串如"pythonzorg"霹肝,因此需要轉(zhuǎn)義估蹄,即特殊字符前加斜線\,如本例可用'python.org'

字符集

即通過設(shè)定一組字符對(duì)其進(jìn)行匹配沫换,通過中括號(hào)括起來:[a-g] 表示可以匹配到字母表中a-g的任何小寫字符臭蚁,同理也可以將這些字符串一個(gè)接一個(gè)的排列進(jìn)去:[a-zA-Z0-9] 可以匹配到任何數(shù)字和任意大小寫的字母。
反轉(zhuǎn)字符集表示出了這之外的字符都匹配:[^abc]表示匹配除了a b c三個(gè)字符的字符讯赏。

選擇符

若之相匹配某幾個(gè)字符串垮兑,比如"abc"和"abef",可采用選擇特殊字符:'abc|abef'漱挎。

子模式

前述例子也可以采用子模式:'ab(c|ef)'系枪,括號(hào)即子模式。

可選項(xiàng)

在子模式后面積上問號(hào)磕谅,使其變?yōu)榭蛇x項(xiàng)私爷。它可能出現(xiàn)在匹配字符串,但不是必須的膊夹。如字符串:

'(http://)?(www\.)?python\.org'

可以匹配到:

'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'

重復(fù)子模式

  • (patten)*允許模式重復(fù)0或多次当犯;
  • (patten)+允許模式重復(fù)1或多次;
  • (patten){m,n}允許模式重復(fù)m到n次割疾。

例如:

'w*\.python\.org'可匹配'www.python.org'或'.python.org'或'wwwwwwwww.python.org'
'w+\.python\.org'可匹配'www.python.org'或'w.python.org'或'wwwwwwwww.python.org'
'w{3.4}\.python\.org'只能匹配'www.python.org'或'wwww.python.org'

re模塊的內(nèi)容

re_moduler.png

re.compile將正則表達(dá)式轉(zhuǎn)換為模式對(duì)象,可以實(shí)現(xiàn)效率的匹配嘉栓。

re.search會(huì)在給定的字符串中尋找第一個(gè)匹配給正則字符串的子字符串宏榕,返回值是true或者false。

re.math會(huì)在給定字符串的開頭匹配正則表達(dá)式侵佃。因此麻昼,re.math('p','python')返回真,而re.math('p','www.python')則返回假馋辈。

re.split會(huì)根據(jù)模式的匹配項(xiàng)來分割字符串抚芦。

import re
some_text = 'alpha , beta ,,, gama delta'
re.split('[,]+',some_txt)

將返回:

['alpha ','beta ','gama delta ']

re.findall將返回所有匹配到的匹配項(xiàng):

import re
pat = '[a-zA-Z]+'
text = '"Hm...err -- are you sure?" he said, sounding insecure.'
re.findall(pat,text)

will return:

['Hm','err','are','you','sure','he','said','sounding','insecure']

re.sub: 使用給定的替換內(nèi)容將匹配模式的字符串(最左端并且覆蓋子字符串)替換掉:

import re
pat = '{name}'
text = 'Dear {name}...'
re.sub(pat,'Mr. Gumby',text)

will return:

'Dear Mr. Gumby...'

re.escape:可以對(duì)字符串中所有可能被解釋為正則運(yùn)算符的字符進(jìn)行轉(zhuǎn)義的應(yīng)用函數(shù)。

如果字符串很長(zhǎng)且包含很多特殊字符迈螟,而你又不想輸入一大堆反斜線叉抡,可以使用這個(gè)函數(shù):

e.g.

re.escape('www.python.org')

will return:

'www\.python\.org'

re.escape('but where is the ambiguity?')

will return:

'but\ where\ is\ the\ ambiguity\?'

匹配對(duì)象和組

簡(jiǎn)單來說,組就是放置在圓括號(hào)里內(nèi)的子模塊答毫,組的序號(hào)取決于它左側(cè)的括號(hào)數(shù)褥民。組0就是整個(gè)模塊,所以在下面的模式中:

‘There (was a (wee) (cooper)) who (lived in Fyfe)’

包含組有:

0 There was a wee cooper who lived in Fyfe

1 was a wee cooper

2 wee

3 cooper

4 lived in Fyfe

re模塊中匹配對(duì)象和組的函數(shù):

re_match.png

e.g.

import re
m = re.match(r'www\.(.*)\..{3}','www.python.org')
m.group()

will return

'www.python.org'

m.group(0)

will return

'www.python.org'

m.group(1)

will return

'python'

m.start(1)

will return:

4

m.end(1)

will return:

10

m.span(1)

will return:

(4,10)

  • group方法返回模式中與給定組匹配的字符串洗搂,如果沒有組號(hào)消返,默認(rèn)為0 载弄;如上面:m.group()==m.group(0) ;如果給定一個(gè)組號(hào)撵颊,會(huì)返回單個(gè)字符串宇攻。

  • start 方法返回給定組匹配項(xiàng)的開始索引,

  • end方法返回給定組匹配項(xiàng)的結(jié)束索引加1倡勇;

  • span以元組(start逞刷,end)的形式返回給組的開始和結(jié)束位置的索引。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末译隘,一起剝皮案震驚了整個(gè)濱河市亲桥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌固耘,老刑警劉巖题篷,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異厅目,居然都是意外死亡番枚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門损敷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葫笼,“玉大人,你說我怎么就攤上這事拗馒÷沸牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵诱桂,是天一觀的道長(zhǎng)洋丐。 經(jīng)常有香客問我,道長(zhǎng)挥等,這世上最難降的妖魔是什么友绝? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肝劲,結(jié)果婚禮上迁客,老公的妹妹穿的比我還像新娘。我一直安慰自己辞槐,他們只是感情好掷漱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榄檬,像睡著了一般切威。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丙号,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天先朦,我揣著相機(jī)與錄音缰冤,去河邊找鬼。 笑死喳魏,一個(gè)胖子當(dāng)著我的面吹牛棉浸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刺彩,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼迷郑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了创倔?” 一聲冷哼從身側(cè)響起嗡害,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畦攘,沒想到半個(gè)月后霸妹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡知押,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叹螟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台盯。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罢绽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出静盅,到底是詐尸還是另有隱情良价,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布蒿叠,位于F島的核電站明垢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栈虚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一史隆、第九天 我趴在偏房一處隱蔽的房頂上張望魂务。 院中可真熱鬧,春花似錦泌射、人聲如沸粘姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孤紧。三九已至,卻和暖如春拒秘,著一層夾襖步出監(jiān)牢的瞬間号显,已是汗流浹背臭猜。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留押蚤,地道東北人蔑歌。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像揽碘,于是被迫代替她去往敵國(guó)和親次屠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 正則表達(dá)式是用來簡(jiǎn)潔表達(dá)一組字符串的表達(dá)式 使用正則表達(dá)式的優(yōu)勢(shì)是什么雳刺?簡(jiǎn)潔一行勝千言 一行就是特征(模式) 無窮...
    六尺帳篷閱讀 609評(píng)論 0 11
  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類似的功能劫灶,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 3,981評(píng)論 0 13
  • 1.正則表達(dá)式 正則表達(dá)式是一種特殊的字符串模式掖桦,用于匹配一組字符串本昏,就好比用模具做產(chǎn)品,而正則就是這個(gè)模具滞详,定義...
    42chaos閱讀 339評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理凛俱,服務(wù)發(fā)現(xiàn),斷路器料饥,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 正則表達(dá)式用來定義“字符串符合規(guī)則”蒲犬。本文從常用符號(hào)和示例兩個(gè)方面著手分析。 A岸啡、正則表達(dá)式常用符號(hào): B原叮、舉例:...
    徐薇薇閱讀 420評(píng)論 0 1