欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲之正則表達式基本用法實例分析

 更新時間:2018年08月08日 11:45:18   作者:Charles.L  
這篇文章主要介紹了Python爬蟲之正則表達式基本用法,結(jié)合實例形式分析了Python正則表達式的基本概念、函數(shù)語法、相關(guān)使用方法及操作注意事項,需要的朋友可以參考下

本文實例講述了Python爬蟲之正則表達式基本用法。分享給大家供大家參考,具體如下:

一、簡介

正則表達式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達式、規(guī)則表達式、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學(xué)的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。

compile 函數(shù)根據(jù)一個模式字符串和可選的標志參數(shù)生成一個正則表達式對象。該對象擁有一系列方法用于正則表達式匹配和替換。

二、使用方法

1、簡單看一下寫法

函數(shù)語法:

re.match(pattern, string, flags=0)

函數(shù)參數(shù)說明:

參數(shù) 描述
pattern 匹配的正則表達式
string 要匹配的字符串。
flags 標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。

匹配成功re.match方法返回一個匹配的對象,否則返回None。

我們可以使用group(num)groups() 匹配對象函數(shù)來獲取匹配表達式。

匹配對象方法 描述
group(num=0) 匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應(yīng)值的元組。
groups() 返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。

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()方法值匹配字符串的開頭如果不滿足,就返回一個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)義詞的意思,例如,你想匹配一個re.compile('.'),這個.是匹配任意字符。但是我就想讓它匹配一個.怎么辦,re.compile('\.'),這樣的話它就真的只匹配一個點。

re.findall()

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

數(shù)量詞:

貪婪模式和非貪婪模式

1、一個小例子

我們知道*表示匹配一個字符串0次或者多次,而+是匹配字符串1次或多次,所以*的時候匹配了0次也打印出來了,而+只找匹配1次的字符。

import re
p = re.compile('[abc]+')
m = p.findall('abcdef')
print(m)
#*
 #['abc', '', '', '', '']
#+
 #['abc']

貪婪與非貪婪模式影響的是被量詞修飾的子表達式的匹配行為,貪婪模式在整個表達式匹配成功的前提下,盡可能多的匹配.

而非貪婪模式在整個表達式匹配成功的前提下,盡可能少的匹配。

2、{}

根據(jù)下面的例子不難看出,數(shù)量詞{m}表示的是匹配前面字符串的幾個字符串

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 掃描整個字符串并返回第一個成功的匹配,否則返回的是None(注意findall返回的是list,而search返回的直接就是字符串)

import re
p = re.compile('abcd')
m = p.search('abcdabcd')
print(m.group())

檢索和替換

Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項。

語法:

re.sub(pattern, repl, string, count=0, flags=0)

參數(shù):

  • pattern : 正則中的模式字符串。
  • repl : 替換的字符串,也可為一個函數(shù)。
  • string : 要被查找替換的原始字符串。
  • count : 模式匹配后替換的最大次數(shù),默認 0 表示替換所有的匹配。

示例一:

替換一#開頭的所有字符(匹配任意字符0次或者多次),替換成無。

import re
phone = "2004-959-559 # 這是一個國外電話號碼"
num = re.sub('#.*','',phone)
print(num)

示例一:擴展

找到所有非數(shù)字的字符,‘'代表著刪除。

import re
phone = "2004-959-559 # 這是一個國外電話號碼"
num = re.sub('\D','',phone)
print(num)

正則表達式修飾符 - 可選標志

正則表達式可以包含一些可選標志修飾符來控制匹配的模式。修飾符被指定為一個可選的標志。多個標志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設(shè)置成 I 和 M 標志

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python隨機數(shù)分布random均勻分布實例

    python隨機數(shù)分布random均勻分布實例

    今天小編就為大家分享一篇python隨機數(shù)分布random均勻分布實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python+Opencv實現(xiàn)圖像匹配功能(模板匹配)

    Python+Opencv實現(xiàn)圖像匹配功能(模板匹配)

    這篇文章主要為大家詳細介紹了Python+Opencv實現(xiàn)圖像匹配功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python對象屬性自動更新操作示例

    Python對象屬性自動更新操作示例

    這篇文章主要介紹了Python對象屬性自動更新操作,結(jié)合實例形式對比分析了Python對象屬性自動更新的原理,并改進了屬性互聯(lián)操作實現(xiàn)方法,需要的朋友可以參考下
    2018-06-06
  • 使用Pygame制作中秋嫦娥奔月小游戲

    使用Pygame制作中秋嫦娥奔月小游戲

    中秋節(jié)是中國傳統(tǒng)的重要節(jié)日之一,起源于嫦娥奔月的神話故事,在中秋節(jié)這個特殊的日子里,人們不僅會欣賞明亮的月亮和嫦娥奔月的美麗故事,還會舉行一些慶祝活動,接下來,我們使用Pygame制作“嫦娥奔月”小游戲,感興趣的朋友可以自己動手試一試
    2023-09-09
  • Python:Scrapy框架中Item Pipeline組件使用詳解

    Python:Scrapy框架中Item Pipeline組件使用詳解

    這篇文章主要介紹了Python:Scrapy框架中Item Pipeline組件使用詳解,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Python hashlib模塊的使用示例

    Python hashlib模塊的使用示例

    這篇文章主要介紹了Python hashlib模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10
  • 將Python代碼打包成.exe可執(zhí)行文件的完整步驟

    將Python代碼打包成.exe可執(zhí)行文件的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何將Python代碼打包成.exe可執(zhí)行文件的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python調(diào)用ChatGPT?API接口的用法詳解

    Python調(diào)用ChatGPT?API接口的用法詳解

    ChatGPT可以實現(xiàn)chat,生成圖片,識別關(guān)鍵,改錯等等功能,本文簡單的給大家介紹一下如何使用python調(diào)用ChatGPT?API接口,感興趣的小伙伴可以參考一下
    2023-05-05
  • 詳解Python中的元組與邏輯運算符

    詳解Python中的元組與邏輯運算符

    這篇文章主要介紹了Python中的元組與邏輯運算符的用法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • OpenCV-Python直方圖均衡化實現(xiàn)圖像去霧

    OpenCV-Python直方圖均衡化實現(xiàn)圖像去霧

    直方圖均衡化可以達到增強圖像顯示效果的目的。最常用的比如去霧。本文就來實現(xiàn)直方圖均衡化實現(xiàn)圖像去霧,感興趣的可以了解一下
    2021-06-06

最新評論