Python爬蟲正則表達式常用符號和方法


注釋:使用re之前,要導入re庫文件。

(1). :匹配任意字符,換行符 \n 除外;每個 . 表示一個占位符。

例子:

a = 'xy123'
b = re.findall('x..',a)
print b

輸出結果:

 

(2)*:匹配前一個字符的0次或無限次。

例子:

a = 'xxyxy123'
b = re.findall('x*',a)
print b

輸出結果為:

 

 

(3)? :匹配前一個字符0次或1次。

例子:

a = 'xxyxy123'
b = re.findall('xy?',a)
print b

輸出結果:

 

 

(4).* :貪心算法,盡可能的匹配多的字符。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b = re.findall('xx.*xx',secret_code)
print b

輸出結果如下:

 

 

(5).*? :非貪心算法。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
c = re.findall('xx.*?xx',secret_code)
print c

輸出結果如下:

 

 

(6)() :括號內的數據作為結果返回。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
d = re.findall('xx(.*?)xx',secret_code)
print d

輸出結果:

 

 

(7) re.S的使用舉例。在Python的正則表達式中,有一個參數為re.S。它表示“.”(不包含外側雙引號,下同)的作用擴展到整個字符串,包括“\n”。看如下代碼:

import re
a = '''asdfsafhellopass:
    234455
    worldafdsf
    '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c

輸出結果如下:

 

正則表達式中,“.”的作用是匹配除“\n”以外的任何字符,也就是說,它是在一行中進行匹配。這里的“行”是以“\n”進行區分的。a字符串有每行的末尾有一個“\n”,不過它不可見。

如果不使用re.S參數,則只在每一行內進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。而使用re.S參數以后,正則表達式會將這個字符串作為一個整體,將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配。

 

(8)

re.findall(pattern, string[, flags]):搜索string,以列表形式返回全部能匹配的子串。

例子1:

pattern = re.compile(r'\d+')
print re.findall(pattern,'one1two2three3four4')

輸出結果為:

 

例子2:

s2 = 'asdfxxIxx123xxlovexxdfd'
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print f2
print f2[0]

輸出結果為:

 

 

(9) search的使用舉例

例子:

s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2)
print f.group()
print f.group(0)
print f.group(1)
print f.group(2)
print f.group(1,2)
print f.groups()

輸出結果為:

 

 

group([group1, …]):

獲得一個或多個分組截獲的字符串;指定多個參數時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫參數時,返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。

groups([default]):

以元組形式返回全部分組截獲的字符串。相當於調用group(1,2,…last)。default表示沒有截獲字符串的組以這個值替代,默認為None。

 

(10) \d 的使用舉例,\d用於匹配數字;\d+ 可以匹配數字字符串。

例子:

a = 'asdfasf1234567fasd555fas'
b = re.findall('(\d+)',a)
print b

輸出結果:

 

 

(11)sub()方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM