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

一文秒懂python正則表達(dá)式常用函數(shù)

 更新時(shí)間:2020年03月07日 11:15:36   作者:簡說Python  
這篇文章主要介紹了python正則表達(dá)式常用函數(shù)及使用方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

導(dǎo)讀: 正則表達(dá)式是處理字符串類型的"核武器",不僅速度快,而且功能強(qiáng)大。本文不過多展開正則表達(dá)式相關(guān)語法,僅簡要 介紹 python中正則表達(dá)式常用函數(shù)及其使用方 法,以作快速查詢?yōu)g覽。

 

01 Re概覽

Re模塊是python的內(nèi)置模塊,提供了正則表達(dá)式在python中的所有用法,默認(rèn)安裝位置在python根目錄下的Lib文件夾(如 ..\Python\Python37\Lib)。主要提供了3大類字符串操作方法:

  • 字符查找/匹配
  • 字符替換
  • 字符分割

由于是面向字符串類型的模塊,就不得不提到字符串編碼類型。re模塊中,模式串和搜索串既可以是 Unicode 字符串 (常用str類型) ,也可以是8位字節(jié)串 (bytes,2位16進(jìn)制數(shù)字,例如\xe5) , 但要求二者必須是同類型字符串。

02 字符串查找/匹配

預(yù)編譯:compile

在介紹查找和匹配函數(shù)前,首先需要知道re的compile函數(shù),該函數(shù)可以將一個(gè)模式串編譯成正則表達(dá)式類型,以便后續(xù)快速匹配和復(fù)用

import re
pattern = re.compile(r'[a-z]{2,5}')
type(pattern) #re.Pattern

此例創(chuàng)建了一個(gè)正則表達(dá)式式對象 (re.pattern) ,命名為pattern,用于匹配2-5位小寫字母的模式串。后續(xù)在使用其他正則表達(dá)式函數(shù)時(shí),即可使用pattern進(jìn)行方法調(diào)用。

匹配:match

match函數(shù)用于從文本串的起始位置開始匹配,若匹配成功,則返回相應(yīng)的匹配對象,此時(shí)可調(diào)用group()方法返回匹配結(jié)果,也可用span()方法返回匹配起止下標(biāo)區(qū)間;否則返回None

import re
pattern = re.compile(r'[a-z]{2,5}')
text1 = 'this is a re test'
res = pattern.match(text1)
print(res) #<re.Match object; span=(0, 4), match='this'>
if res:
 print(res.group()) #this
 print(res.span()) #(0, 4)
text2 = '是的, this is a re test'
print(pattern.match(text2))#None

match函數(shù)還有一個(gè)變形函數(shù)fullmatch,當(dāng)且僅當(dāng)模式串與文本串剛好全部匹配時(shí),返回一個(gè)匹配對象,否則返回None

搜索:search

match只提供了從文本串起始位置匹配的結(jié)果,如果想從任意位置匹配,則可調(diào)用search方法,與match方法類似,當(dāng)任意位置匹配成功,則立即返回一個(gè)匹配對象,也可調(diào)用span()方法獲取起止區(qū)間、調(diào)用group方法獲得匹配文本串

import re
pattern = re.compile(r'\s[a-z]{2}')
text1 = 'this is a re test'
res = pattern.search(text1)
print(res) #<re.Match object; span=(4, 7), match=' is'>
if res:
 print(res.group()) #is
 print(res.span()) #(4, 7)
pattern2 = re.compile(r'\s[a-z]{5}')
text2 = '是的,this is a re test'
print(pattern2.search(text2))#None

match和search均用于匹配單個(gè)結(jié)果,唯一區(qū)別在于前者是從起始位置開始匹配,而后者從任意位置匹配,匹配成功則返回一個(gè)match對象。

全搜索:findall/finditer

幾乎是最常用的正則表達(dá)式函數(shù),用于尋找所有匹配的結(jié)果,例如在爬蟲信息提取中,可非常方便地提取所有匹配字段

import re
pattern = re.compile(r'\s[a-z]{2,5}')
text1 = 'this is a re test'
res = pattern.findall(text1)
print(res) #[' is', ' re', ' test']

findall返回的是一個(gè)列表對象類型,當(dāng)無匹配對象時(shí),返回一個(gè)空列表。為了避免因同時(shí)返回大量匹配結(jié)果占用過多內(nèi)存,可以調(diào)用finditer函數(shù)返回一個(gè)迭代器類型,其中每個(gè)迭代元素是一個(gè)match對象,可繼續(xù)調(diào)用group和span方法獲取相應(yīng)結(jié)果

import re
pattern = re.compile(r'\s[a-z]{2,5}')
text1 = 'this is a re test'
res = pattern.finditer(text1)
for r in res:
 print(r.group())
"""
 is
 re
 test
"""

當(dāng)匹配模式串較為簡單或者僅需單詞調(diào)用時(shí),上述所有方法也可直接調(diào)用re類函數(shù),而無需事先編譯。此時(shí)各方法的第一個(gè)參數(shù)為模式串。

import re
pattern = re.compile(r'\d{2,5}')
text = 'this is re test'
re.findall('[a-z]+', text) #['this', 'is', 're', 'test']

03 字符串替換/分割

替換:sub/subn

當(dāng)需要對文本串進(jìn)行條件替換時(shí),可調(diào)用re.sub實(shí)現(xiàn) (當(dāng)然也可先編譯后再用調(diào)用實(shí)例方法) ,相應(yīng)參數(shù)分別為模式串、替換格式、文本串,還可以通過增加缺省參數(shù)限定替換次數(shù)和匹配模式。通過在模式串進(jìn)行分組,可實(shí)現(xiàn)字符串的格式化替換(類似字符串的format方法),以實(shí)現(xiàn)特定任務(wù)。

import re
text = 'today is 2020-03-05'
print(re.sub('-', '', text)) #'today is 20200305'
print(re.sub('-', '', text, 1)) #'today is 202003-05'
print(re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)) #'today is 03/05/2020'

re.sub的一個(gè)變形方法是re.subn,區(qū)別是返回一個(gè)2元素的元組,其中第一個(gè)元素為替換結(jié)果,第二個(gè)為替換次數(shù)

import re
text = 'today is 2020-03-05'
print(re.subn('-', '', text)) #('today is 20200305', 2)

分割:split

還可以調(diào)用正則表達(dá)式實(shí)現(xiàn)字符串的特定分割,相當(dāng)于.split()方法的一個(gè)加強(qiáng)版,實(shí)現(xiàn)特定模式的分割,返回一個(gè)切割后的結(jié)果列表

import re
text = 'today is a re test, what do you mind?'
print(re.split(',', text)) #['today is a re test', ' what do you mind?']

04 總結(jié)

python中的re模塊提供了正則表達(dá)式的常用方法,每種方法都包括類方法調(diào)用(如re.match)或模式串的實(shí)例調(diào)用(pattern.match)2種形式

  • 常用的匹配函數(shù):match/fullmatch
  • 常用的搜索函數(shù):search/findall/finditer
  • 常用的替換函數(shù):sub/subn
  • 常用的切割函數(shù):split
  • 還有其他很多方法,但不是很常用,具體可參考官方文檔
  • 另外,python還有第三方正則表達(dá)式庫regex可供選擇

到此這篇關(guān)于一文秒懂python正則表達(dá)式常用函數(shù)的文章就介紹到這了,更多相關(guān)python 正則表達(dá)式常用函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 最全的常用正則表達(dá)式大全

    最全的常用正則表達(dá)式大全

    這篇文章主要為大家分享了最全的常用正則表達(dá)式大全,包括校驗(yàn)數(shù)字、字符、一些特殊的需求等等,感興趣的小伙伴們可以參考一下
    2015-12-12
  • PHP 正則表達(dá)式 推薦

    PHP 正則表達(dá)式 推薦

    正則表達(dá)式,大家在開發(fā)中應(yīng)該是經(jīng)常用到,現(xiàn)在很多開發(fā)語言都有正則表達(dá)式的應(yīng)用,比如javascript,java,.net,php等等,我今天就把我對正則表達(dá)式的理解跟大家嘮嘮,不當(dāng)之處,請多多指教
    2012-03-03
  • 正則表達(dá)式(?=)正向先行斷言實(shí)戰(zhàn)案例

    正則表達(dá)式(?=)正向先行斷言實(shí)戰(zhàn)案例

    x(?=y)稱為先行斷言(Positive look-ahead),x只有在y前面才匹配,y不會(huì)被計(jì)入返回結(jié)果,比如要匹配后面跟著百分號的數(shù)字,可以寫成/\d+(?=%)/,這篇文章主要給大家介紹了關(guān)于正則表達(dá)式(?=)正向先行斷言的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • MySQL中REGEXP正則表達(dá)式使用大全

    MySQL中REGEXP正則表達(dá)式使用大全

    使用正則表達(dá)式操作mysql數(shù)據(jù)庫非常方便,本篇文章給大家分享mysql中REGEXP正則表達(dá)式使用大全,感興趣的朋友跟著小編一起看看吧
    2015-09-09
  • 詳解正則表達(dá)式 \v 元字符

    詳解正則表達(dá)式 \v 元字符

    正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。\v元字符可以匹配垂直制表符。下面給大家介紹正則表達(dá)式 \v 元字符,感興趣的朋友一起看看吧
    2018-01-01
  • Shell 正則表達(dá)式及綜合案例及文本處理工具詳解

    Shell 正則表達(dá)式及綜合案例及文本處理工具詳解

    這篇文章主要介紹了Shell 正則表達(dá)式及綜合案例及文本處理工具的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • python 正則表達(dá)式 re.sub & re.subn

    python 正則表達(dá)式 re.sub & re.subn

    正則表達(dá)式一個(gè)比較常見的用途是找到所有模式匹配的字符串并用不同的字符串來替換它們。sub方法提供一個(gè)替換值,可以是字符串或函數(shù),和一個(gè)要被處理的字符串。這篇文章主要介紹了python 正則表達(dá)式 re.sub & re.subn,需要的朋友可以參考下
    2017-12-12
  • linux下關(guān)于正則表達(dá)式grep的一點(diǎn)總結(jié)

    linux下關(guān)于正則表達(dá)式grep的一點(diǎn)總結(jié)

    正則表達(dá)式(Regular Expression)是用于描述一組字符串特征的模式,用來匹配特定的字符串。通過特殊字符+普通字符來進(jìn)行模式描述,從而達(dá)到文本匹配目的工具
    2020-04-04
  • 小議正則表達(dá)式效率 貪婪、非貪婪與回溯

    小議正則表達(dá)式效率 貪婪、非貪婪與回溯

    前幾天看了鳥哥的BLOG上寫的關(guān)于正則表達(dá)式的回溯與遞歸的限制時(shí),對貪婪、非貪婪產(chǎn)生的回溯有疑問,遂近段時(shí)間,仔細(xì)的學(xué)習(xí)研究了一下,現(xiàn)在把經(jīng)驗(yàn)心得與大家分享一下。
    2011-04-04
  • 正則表達(dá)式提取網(wǎng)址、標(biāo)題、圖片等一例(.Net Asp Javascript/Js)的實(shí)現(xiàn)

    正則表達(dá)式提取網(wǎng)址、標(biāo)題、圖片等一例(.Net Asp Javascript/Js)的實(shí)現(xiàn)

    用各種語言實(shí)現(xiàn)的提取內(nèi)容中的網(wǎng)址,標(biāo)題,圖片等功能代碼,對于大家掌握正則的共用性有很大的幫助。
    2008-11-11

最新評論