關於python爬蟲經常要用到的一些Re.正則表達式
阿新 • • 發佈:2018-04-06
tput num -c output lock love spa dfa 全部 a.點號(
b.星號(
c.問號(
d.貪心(
e.非貪心(
f.經典用法
轉載: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.正則表達式