Python爬蟲之正則表達(dá)式基本用法實(shí)例分析
本文實(shí)例講述了Python爬蟲之正則表達(dá)式基本用法。分享給大家供大家參考,具體如下:
一、簡(jiǎn)介
正則表達(dá)式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達(dá)式、規(guī)則表達(dá)式、常規(guī)表示法(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列匹配某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來(lái)檢索、替換那些匹配某個(gè)模式的文本。
compile 函數(shù)根據(jù)一個(gè)模式字符串和可選的標(biāo)志參數(shù)生成一個(gè)正則表達(dá)式對(duì)象。該對(duì)象擁有一系列方法用于正則表達(dá)式匹配和替換。
二、使用方法
1、簡(jiǎn)單看一下寫法
函數(shù)語(yǔ)法:
re.match(pattern, string, flags=0)
函數(shù)參數(shù)說(shuō)明:
| 參數(shù) | 描述 |
|---|---|
| pattern | 匹配的正則表達(dá)式 |
| string | 要匹配的字符串。 |
| flags | 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。 |
匹配成功re.match方法返回一個(gè)匹配的對(duì)象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。
| 匹配對(duì)象方法 | 描述 |
|---|---|
| group(num=0) | 匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),在這種情況下它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。 |
| groups() | 返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。 |
import re
p = re.compile('abcd')
print(type(p))
#<class '_sre.SRE_Pattern'>
print(dir(p))
#['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'findall', 'finditer', 'flags', 'fullmatch', 'groupindex', 'groups', 'match', 'pattern', 'scanner', 'search', 'split', 'sub', 'subn']
m = p.match('abcdef')
print(type(m))
#<class '_sre.SRE_Match'>
print(dir(m))
#['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']
print(m.group())
#abcd
print(m.group(0))
#abcd
re.match()方法值匹配字符串的開頭如果不滿足,就返回一個(gè)None
import re
p = re.compile('abcd')
m = p.match('abdcef')
print(m.group())
#AttributeError: 'NoneType' object has no attribute 'group'
神奇的.
import re
p = re.compile('.')
m = p.match('abdcef')
print(m.group())
#a
特殊字符(元字符)
注意:\在里面是轉(zhuǎn)義詞的意思,例如,你想匹配一個(gè)re.compile('.'),這個(gè).是匹配任意字符。但是我就想讓它匹配一個(gè).怎么辦,re.compile('\.'),這樣的話它就真的只匹配一個(gè)點(diǎn)。

re.findall()
import re
p = re.compile('\.')
#匹配符號(hào)點(diǎn)(注意這里可前面加上了轉(zhuǎn)義符\,就不是匹配任意字符了)
m = p.findall('abc.def.')
print(type(m))
#<class 'list'>
print(m)
#['.', '.']
#可以得出,返回的是一個(gè)list,全局查找,不想match方法只匹配字符串開頭
數(shù)量詞:

貪婪模式和非貪婪模式
1、一個(gè)小例子
我們知道*表示匹配一個(gè)字符串0次或者多次,而+是匹配字符串1次或多次,所以*的時(shí)候匹配了0次也打印出來(lái)了,而+只找匹配1次的字符。
import re
p = re.compile('[abc]+')
m = p.findall('abcdef')
print(m)
#*
#['abc', '', '', '', '']
#+
#['abc']
貪婪與非貪婪模式影響的是被量詞修飾的子表達(dá)式的匹配行為,貪婪模式在整個(gè)表達(dá)式匹配成功的前提下,盡可能多的匹配.
而非貪婪模式在整個(gè)表達(dá)式匹配成功的前提下,盡可能少的匹配。
2、{}
根據(jù)下面的例子不難看出,數(shù)量詞{m}表示的是匹配前面字符串的幾個(gè)字符串
import re
p = re.compile('[abc]{3}')
m = p.findall('abcdabcd')
print(m)
#{1}
#['a', 'b', 'c', 'a', 'b', 'c']
#{2}
#['ab', 'ab']
#{3}
#['abc', 'abc']
re.search方法
re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配,否則返回的是None(注意findall返回的是list,而search返回的直接就是字符串)
import re
p = re.compile('abcd')
m = p.search('abcdabcd')
print(m.group())
檢索和替換
Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項(xiàng)。
語(yǔ)法:
re.sub(pattern, repl, string, count=0, flags=0)
參數(shù):
- pattern : 正則中的模式字符串。
- repl : 替換的字符串,也可為一個(gè)函數(shù)。
- string : 要被查找替換的原始字符串。
- count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配。
示例一:
替換一#開頭的所有字符(匹配任意字符0次或者多次),替換成無(wú)。
import re
phone = "2004-959-559 # 這是一個(gè)國(guó)外電話號(hào)碼"
num = re.sub('#.*','',phone)
print(num)
示例一:擴(kuò)展
找到所有非數(shù)字的字符,‘'代表著刪除。
import re
phone = "2004-959-559 # 這是一個(gè)國(guó)外電話號(hào)碼"
num = re.sub('\D','',phone)
print(num)
正則表達(dá)式修飾符 - 可選標(biāo)志
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過(guò)按位 OR(|) 它們來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- 零基礎(chǔ)寫python爬蟲之神器正則表達(dá)式
- Python的爬蟲包Beautiful Soup中用正則表達(dá)式來(lái)搜索
- python3爬蟲之入門基礎(chǔ)和正則表達(dá)式
- python爬蟲 正則表達(dá)式使用技巧及爬取個(gè)人博客的實(shí)例講解
- python爬蟲正則表達(dá)式之處理?yè)Q行符
- 玩轉(zhuǎn)python爬蟲之正則表達(dá)式
- Python爬蟲正則表達(dá)式常用符號(hào)和方法
- Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容
- Python 爬蟲學(xué)習(xí)筆記之正則表達(dá)式
- Pyhton爬蟲知識(shí)之正則表達(dá)式詳解
相關(guān)文章
Python實(shí)用庫(kù) PrettyTable 學(xué)習(xí)筆記
這篇文章主要介紹了Python實(shí)用庫(kù) PrettyTable 學(xué)習(xí)筆記,結(jié)合實(shí)例形式分析了Python表格操作庫(kù)PrettyTable的安裝、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-08-08
使用Python制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端
這篇文章主要為大家詳細(xì)介紹了如何使用Python語(yǔ)言制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2023-04-04
Python 使用 Bert 進(jìn)行中文情感分析的方法
在自然語(yǔ)言處理(NLP)領(lǐng)域,情感分析是一個(gè)非常常見且重要的應(yīng)用,本文將帶領(lǐng)新手使用 BERT 模型進(jìn)行中文情感分析,并會(huì)詳細(xì)講解如何加載開源數(shù)據(jù)集、訓(xùn)練模型、評(píng)估準(zhǔn)確度,并最終導(dǎo)出模型供未來(lái)使用,感興趣的朋友跟隨小編一起看看吧2024-10-10
Python+Socket實(shí)現(xiàn)基于TCP協(xié)議的客戶與服務(wù)端中文自動(dòng)回復(fù)聊天功能示例
這篇文章主要介紹了Python+Socket實(shí)現(xiàn)基于TCP協(xié)議的客戶與服務(wù)端中文自動(dòng)回復(fù)聊天功能,結(jié)合實(shí)例形式分析了Python+Socket實(shí)現(xiàn)帶自動(dòng)回復(fù)功能的TCP聊天程序相關(guān)操作方法與注意事項(xiàng),需要的朋友可以參考下2017-08-08
小眾實(shí)用的Python 爬蟲庫(kù)RoboBrowser
這篇文章主要介紹了Python 爬蟲庫(kù)RoboBrowser的使用簡(jiǎn)介,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實(shí)現(xiàn)
這篇文章主要介紹了python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實(shí)現(xiàn) ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10

