1. 程式人生 > >關於python爬蟲經常要用到的一些Re.正則表達式

關於python爬蟲經常要用到的一些Re.正則表達式

tput num -c output lock love spa dfa 全部

轉載:https://blog.csdn.net/skyeyesxy/article/details/50837984

1.正則表達式的常用符號與方法

常用符號:點號,星號,問號與括號(小括號)

  • (.):匹配任意字符,換行符\n除外
  • (*):匹配前一個字符0次或無限次
  • (?):匹配前一個字符0次或1次
  • (.*):貪心算法
  • (.*?):非貪心算法
  • ( ):括號內的數據作為結果返回

常用方法:re.findall, re.search, re.sub

  • findall:匹配所有符合規律的內容,返回包含結果的列表
  • search:匹配並提取第一個規律的內容,返回一個正則表達式對象(object)
  • sub:替換符合規律的內容,返回替換後的值

2.舉例說明

1)findall

a.點號(.)

>>import re
a = ‘xz123‘
b = re.findall(‘x.‘, a)
print(b)
>>輸出 [‘xz‘]

############點.是一個占位符,一個.代表一個符號

b.星號(*)

>>import re
a = ‘xyxy123‘
b = re.findall(‘x*‘, a)
print b
>>
  • 輸出[‘x‘, ‘‘, ‘x‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘]

############依次匹配字符,有則顯示,無則顯示‘‘(空)。

c.問號(?)

>>import re
a = ‘xy123‘
b = re.findall(‘x?‘, a)
print b
  • 單獨與*一樣,前面附加其他的符號將做非貪心限制

d.貪心(.*)

import re
secret_code = ‘ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2‘
b = re.findall(‘xx.*xx‘, secret_code)
print b
  • 輸出[‘xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxx‘]

只要滿足條件全部顯示,貪心算法

e.非貪心(.*?)

b = re.findall(‘xx.*?xx‘, secret_code)
  • 輸出[‘xxIxx‘, ‘xxlovexx‘, ‘xxyouxx‘]

以上只做了解,一般只用(.*?)

f.經典用法(.*?)

b = re.findall(‘xx(.*?)xx‘, secret_code)
  • 輸出[‘I‘, ‘love‘, ‘you‘]

()包圍所需要的內容,括號內的內容作為結果返回,不需要的內容放在括號外面

2)re.S

import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
#love後有換行符
b = re.findall(‘xx(.*?)xx‘, secret_code)
print b
  • 輸出[‘I‘, ‘bvk14rgjh‘],因為.不能匹配換行符。所以會一行為一個搜索項去找。匹配任何字符除了新的一行
import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
#love後有換行符
b = re.findall(‘xx(.*?)xx‘, secret_code, re.S)
print b
>>
輸出[‘I‘, ‘love\n‘, ‘you‘],re.S讓.匹配所有行,包括了換行符(以\n的形式出現

4)sub

import re
s = ‘123abcssfasdfas123‘
output = re.sub(‘123(.*?)123‘, ‘123789123‘, s)
print output
>>
  • 輸出123789123
  • sub將符合條件的()內內容提換

6)compile用法

import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
pattern = ‘xx(.*?)xx‘
new_pattern = re.compile(pattern, re.S)
b = re.findall(new_pattern, secret_code)
print b

因為findall自動調用compile方法,所以不先編譯規律compile再匹配

7)匹配純數字(\d+)

import re
a = ‘dfhkgh43gfhja873y5t2167715‘
b = re.findall(‘(\d+)‘, a)
print b

>>
  • 輸出[‘43‘, ‘873‘, ‘5‘, ‘2167715‘]

關於python爬蟲經常要用到的一些Re.正則表達式