久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【Python爬蟲學(xué)習(xí)筆記(2)】正則表達(dá)式(re模塊)相關(guān)知識點總結(jié)

 wusiqi111 2017-06-20


1. 正則表達(dá)式

    正則表達(dá)式是可以匹配文本片段的模式。

1.1 通配符

    正則表達(dá)式能夠匹配對于一個的字符串,,可以使用特殊字符創(chuàng)建這類模式,。(圖片來自cnblogs)

pyre_ebb9ce1c-e5e8-4219-a8ae-7ee620d5f9f1

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

    由于在正則表達(dá)式中,有時需要將特殊字符作為普通字符處理,,就需要用‘\’進(jìn)行轉(zhuǎn)義,,例如‘python\\.org’就會匹配‘python.org’,那么為什么要用兩個反斜杠呢,,原因在于需要進(jìn)行兩層轉(zhuǎn)義,,首先是re模塊表示正則表達(dá)式中需要轉(zhuǎn)義一次,其次是python解釋器即python的語法還要求再轉(zhuǎn)義一次,。也是因為這個原因,,對于‘\’需要‘\\\\’來匹配。為了表示的簡介性,,可以使用原始字符串來處理,,則上面兩例分別可以寫為r‘python\.org’和r‘\\’。

1.3 字符集

    舉例說明,,例如‘[pj]python’可以匹配‘python’和‘jpython’,,[a-zA-Z0-9]可以匹配任意一個大小寫字母和數(shù)字(注意:是一個)。為了反轉(zhuǎn)字符集,,可以將‘^’放在字符串的開頭,,例如‘[^abc]’可以匹配除a,b,,c以為的任意字符,。

    注意:如果希望‘.’,‘*’,,‘?’這些特殊字符用作文本字符,,則需‘\’進(jìn)行轉(zhuǎn)義,但是在字符集中無必要,,盡管是合法的(因為可以調(diào)整順序來解決),。記住以下兩個規(guī)則:

    a. 如果‘^’出現(xiàn)在字符集的開頭則需要轉(zhuǎn)義,除非希望用作字符集反轉(zhuǎn),。

    b. 右中括號‘]’和橫線‘-’要么放在字符集開頭,,要么轉(zhuǎn)義,。

1.4 選擇符和子模塊

    如果只想匹配‘python’和‘perl’,則可以用選擇運算符管道符號‘|’,,模式可寫為‘python|perl’

    如果不需要對整個模式使用選擇運算符,,而只需要一部分,可以用括號括起需要的部分,,對于上例,,表示為‘p(ython|erl)’。括號括起部分稱為子模塊(subpattren),。

1.5 可選項和重復(fù)子模塊

    在子模塊后面加上問號,,就變成了可選項。

    (pattern),?:允許模式出現(xiàn)0次或者1次,。

    (pattern)+:允許模式出現(xiàn)1次或者多次。

    (pattern)*:允許模式出現(xiàn)0次或者多次,。

    (pattern){m,n}:允許模式出現(xiàn)m~n次,。

1.6 字符串的開始和結(jié)尾

    舉例說明,‘www.python.org’和‘python.www.org’中的子字符串‘www’能匹配模式‘w+’,,但是只希望‘www.python.org’能匹配,,則模式可用‘^w+’表示,如果希望‘python.org.www’中的子字符串‘www’能匹配‘w+’,,則模式需寫為‘$w+’,。

 

2. re模塊的函數(shù)

2.1 .compile

    將正則表達(dá)式轉(zhuǎn)換為模式對象,實現(xiàn)更有效率的匹配,。

import re
pattern = re.compile('(^w+)\.python\.org')

2.2 .search(重要)

    在給定字符串中尋找第一個匹配給定正則表達(dá)式的子字符串,,如果找到會返回一個MatchObject對象,這個對象中的元素可以.group()得到(之后將會介紹group的概念),,如果沒找到就會返回None,。

    可以先判斷是否找到再取元素,假設(shè)例子中的pattern有兩個組,,返回第一個組,。

have_character = re.search(pattern,text)
if not have_character:
    return have_character.group(1)

2.3 .match

    在給定字符串的開始處匹配正則表達(dá)式,例如re.match(‘p’,‘python’)返回為對象MatchObject,,即匹配成功,,如果要匹配整個字符串,則可以在模式最后加上‘$’符號(代表結(jié)尾也匹配),。

2.4 .split

    根據(jù)模式匹配項來分割字符串,。類似于字符串的split方法,,但是可用正則表達(dá)式來帶起固定的分隔符字符串,,例如允許用任意長度的逗號和空格序列來分割字符串,。

text = 'a, b,,,,c  d'
re.split('[, ]+', text)
#['a', 'b', 'c', 'd']

    參數(shù)maxsplit可以設(shè)定最多的分割次數(shù)。

text = 'a, b,,,,c  d'
re.split('[, ]+', text, maxsplit=2)
#['a', 'b', 'c  d']

2.5 .findall(重要)

    該方法以列表的形式返回所有的匹配項,。

pattern = 'a(b+?)c(d+?)e'
items = re.findall(pattern, 'abbcddeabbbcddde')
print items
#items = [('bb', ‘dd’), ('bbb', 'ddd')]

2.6 .sub(pattern, repl, string[, count=0]) (重要)

    將字符串中所有pattern的匹配項用repl代替,。

pattern = re.compile(r'\*([^\*]+)\*')
re.sub(pattern, r'<em>\1</em>', 'Hello, *world*!')
#'Hello, <em>world</em>!'

    在sub函數(shù)三個參數(shù)中,pattern代表模式,,repl代表目標(biāo)形式,,string代表待匹配替換字符串。

    替換步驟:

    a. 用模式pattern套待匹配替換字符串string,。

    b. 按照目標(biāo)形式repl對字符串進(jìn)行重建(即用目標(biāo)形式去代替string中與pattern匹配的子字符串)

    sub函數(shù)強大功能最重要的體現(xiàn)在于可以在替代字符串中使用組號,。(具體內(nèi)容參考鏈接:http:///questions/5984633/python-re-sub-group-number-after-number, http://www./python_re_sub_detailed_introduction/

re.sub(r'(foo)', r'\g<1>123', 'foobar')
#'foo123bar'

2.7 .escape

    如果一個字符串很長且包含很多特殊字符,,而不想輸入一大堆反斜杠來轉(zhuǎn)義,,可以用這個函數(shù)對字符串中所有可能被解釋為正則運算符的字符進(jìn)行轉(zhuǎn)義為普通文本字符。

 

3. 匹配對象和組

    re模塊的search,,match函數(shù)在找到匹配項時都會返回一個MatchObject對象,,對于這樣一個對象m,可以用m.group()來取某組的信息,,如果.group()默認(rèn)組號為0,,則返回整個字符串,.group(1)返回與第一個子模式匹配的單個字符串,,.group(2)等等以此類推,。

    .start()方法得到對應(yīng)組的開始索引,.end()得到對應(yīng)組的結(jié)束索引,,.span()以元組形式給出對應(yīng)組的開始和結(jié)束位置,,括號中填入組號,不填入組號時默認(rèn)為0,。

 

4. 貪婪和非貪婪模式

    重復(fù)運算符在默認(rèn)條件下是貪婪的,。

pattern = r'\*(.+)\*'
re.sub(pattern, r'<em>\1</em>', '*This* is *it*!')
#'<em>This* is *it</em>'

    可見貪婪模式匹配了開始星號到結(jié)束星號間的全部內(nèi)容,包括中間兩個星號,。

    用(.+?)代替(.+)得到非貪婪模式,,它會匹配盡可能少的內(nèi)容。

pattern = r'\*(.+?)\*'
re.sub(pattern, r'<em>\1</em>', '*This* is *it*!')
#'<em>This</em> is <em>it</em>'

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多