溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python正則表達式模塊之re模塊怎么使用

發(fā)布時間:2023-04-17 15:59:39 來源:億速云 閱讀:101 作者:iii 欄目:開發(fā)技術

本文小編為大家詳細介紹“Python正則表達式模塊之re模塊怎么使用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Python正則表達式模塊之re模塊怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    前言:

    re模塊(正則表達)是Python中的重要組成部分,這里涉及到字符串的匹配,轉(zhuǎn)換,自定義格式化……等等,尤其是對于后面要學的Python爬蟲是經(jīng)常用到的。這個模塊是Python自帶的,不需要pip下載,導入使用就行了。

    之前我們學過了r原始字符串標識符,比如:r'123\n' 輸出結果就是123\n,是表示輸出原始字符串,里面的轉(zhuǎn)義符就當做普通的一個字符直接輸出就行了,這個也是一種正則表達方式。

     print(r'hello\n123\t')
    #輸出結果:hello\n123\t

    導入模塊

    import re

    1.re.match() 函數(shù)

    語法格式:re.match(pat,string,flag=0)

    用法:re.match('正則表達式’,'要匹配的字符串',flag= )

    參數(shù)說明

    pat:是表示參與匹配的正則表達式

    string:是表示要匹配的字符串

    flag:是標志符,用于控制正則表達式的匹配方式(設置條件之類的)

    函數(shù)說明:

    這個函數(shù)是從開頭第一個字符開始匹配的,如果匹配成功的話就返回一個匹配對象,如果失敗就返回none。如果我們想要獲取到返回的對象就用group(num)函數(shù)來獲取,這個函數(shù)獲取的結果就是匹配成功的字符串,如果num為0的話,其實等效于group(),如果num為1的話就返回正則表達式第一個括號匹配成功的字符串,如果num為2的話就返回正則表達式第二個括號匹配成功的字符串

    (1)匹配單個字符

    字符功能位置
    .匹配任意一個字符(除了\n)
    [ ]

    匹配[ ]中列舉的字符(可以是一個范圍)


    \d匹配數(shù)字,0~9可以寫在[ ]中
    \D

    匹配非數(shù)字,除了數(shù)字以外都可以匹配成功

    可以寫在[ ]中
    \s匹配空白符,空格 ,Tab可以寫在[ ]中
    \S匹配非空白符可以寫在[ ]中
    \w
    匹配0-9,a-z,A-Z,中文等等除了特殊符號以外的范圍
    內(nèi)的字符
    可以寫在[ ]中
    \W

    匹配非單詞子串,除了\w范圍 以內(nèi)的都可以匹配

    可以寫在[ ]中

    示例

    import re
    string='hello word!'
    pat=re.match('.',string)
    print(pat)
    print(pat.group())
    #輸出結果:<re.Match object; span=(0, 1), match='h'>  
    # h

    其中第一個輸出的結果就是返回的對象,span=(0,1)是表示匹配范圍為字符串的第0位(區(qū)間是左閉右開),匹配成功的字符串match='h'

    如果用group()去獲取對象字符串就直接輸出 h

    示例1:

    import re
    #單個匹配示例
     
    #1.'.'號匹配
    a='123hello你好'
    a1=re.match('..',a)#正則表達式有兩個..那么就匹配字符串a(chǎn)前兩個字符
    print(a1,a1.group())
    #輸出結果:<re.Match object; span=(0, 2), match='12'> 12
     
    #2.'.'號匹配
    b='garrymod555'
    b1=re.match('g..r',b)
    print(b1,b1.group())
    #輸出結果:<re.Match object; span=(0, 4), match='garr'> garr
     
    #3.直接匹配:被匹配的字符串首字符要與正則表達式相同,大小寫一一對應
    c='python歐尼醬'
    c1=re.match('p',c)
    print(c1,c1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='p'> p
     
    #4.利用[],枚舉匹配
    d='Haolow'
    d1=re.match('[hH]',d)  #這時候d 的開頭大小寫都可以匹配成功
    print(d1,d1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='H'> H
     
    #利用[],枚舉匹配0~9范圍的數(shù)字
    num='51997asd'
    num1=re.match('[0123456789]',num)
    print(num1,num1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='5'> 5
     
    #5.利用[],范圍匹配
    e='ikuncxk'
    e1=re.match('[a-z]',e)  #[]內(nèi)是表示a~z在字符范圍
    print(e1,e1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='i'> i
     
    #6.利用[],匹配多個范圍
    f='567hhh'
    f1=re.match('[2-68-9]',f)  #這個是表示匹配2~6和8~9 范圍以內(nèi)的數(shù)字(字母也是同樣的道理)
    print(f1,f1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='5'> 5
     
    #7.利用\d,匹配數(shù)字(另外一個是\D,這里就不講了,正則表達式匹配添加是跟\d完全相反的)
    g='666985www'
    g1=re.match('\d',g)   #
    print(g1,g1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='6'> 6
     
    #8.利用\s,匹配空白符(跟上面一樣\S,是\s反過來的,用法一樣,不講)
    h='  91呵呵'
    h2=re.match('\s',h)
    print(h2,h2.group())
    #輸出結果:<re.Match object; span=(0, 1), match=' '>
     
    #9.利用\w,匹配0-9,a-z,A-Z,中文等等除了特色符號以外的范圍內(nèi)的字符
    i='天問1號'
    i1=re.match('\w',i)
    print(i1,i1.group())
    #輸出結果:<re.Match object; span=(0, 4), match='天問1號'> 天問1號
     
    #10.利用\W,匹配特殊字符(\w范圍以外的字符)
    k='@qq.com'
    k1=re.match('\W',k)
    print(k1,k1.group())
    #輸出結果:<re.Match object; span=(0, 1), match='@'> @

    示例2:(匹配失敗)

    import re
    kun='hellosad'
    k=re.match('5',kun)
    print(k)
    #輸出結果:None

    (2)匹配多個字符 字符功能/說明位置*

    字符功能/說明位置
    *

    匹配前一個字符,這個字符出現(xiàn)0次到無限次(可有可無)

    可以用在字符或者()之后

    +

    匹配前一個字符,這個字符必須出現(xiàn)一次以上(否則報錯)上限為無限

    可以用在字符或者()之后

    ?

    匹配前一個字符,這個字符出現(xiàn)0次到1次

    可以用在字符或者()之后

    {m}

    匹配前?個字符出現(xiàn)m次

    可以用在字符或者()之后

    {m,n}

    匹配前?個字符出現(xiàn)從m到n次,若省略m,則匹配0到n次,若省略n,則匹配m到無限次;若省略m,這匹配m,這匹配0到n次

    可以用在字符或者()之后

    示例代碼:

    import re
     
    # *  匹配多個字符
    p='1112223haowww.com'
    #示例1
    p1=re.match('[\d]*',p)
    print(p1.group())
    #輸出結果:1112223
    #示例2
    p2=re.match('1*',p)
    print(p2.group())
    #輸出結果:111
    #示例3
    p3=re.match('1t*',p)
    print(p3.group())  #不會報錯
    #輸出結果:1
     
    # + 匹配多個字符
    q='aaa112python'
    #示例1
    q1=re.match('[a-z]+',q)
    print(q1.group())
    #輸出結果:aaa
    #示例2
    q2=re.match('ai+',q)
    #print(q2.group()) #報錯
    print(q2)
    #輸出結果:None
     
    # { }綜合使用
    #示例1:匹配由大小寫字母以及數(shù)字組成的密碼
    ret=re.match('[a-zA-Z0-9]{6}','321uyg88') #如果{}里面的數(shù)字大于8就會報錯,超過范圍了
    print(ret.group()) #輸出結果:321uyg
    #示例2:匹配8~12為由小寫字母和數(shù)字組成的密碼
    res=re.match('[a-z0-9]{8,12}','123520ikun')
    print(res.group())#輸出結果123520ikun

    (3) 匹配開頭和結尾

    字符功能
    ^匹配字符串的開頭
    $匹配字符串的結尾

    示例:

    Python正則表達式模塊之re模塊怎么使用

    2.re.search() 函數(shù)

    格式:

    re.search('正則表達式','字符串')

    說明:這個函數(shù)是從整個字符串去進行匹配的,跟re.match()不同,re.match()是從開頭去匹配,如果開頭不一樣就返回None,而re.search()是看字符串的全局,直到匹配到滿足正則表達式才返回匹配對象,如果整個字符串都沒有找到匹配對象才會返回None

    示例:

    import re
    r=re.search('wao','123waohhhq')
    print(r.group())
    #輸出結果:wao
     
    s=re.search('q[0-9]?j','heheqq5jbye')
    print(s.group())
    #輸出結果:q5j

    3.re.findall() 函數(shù)

    格式:

    re.findall('正則表達式','字符串')

    說明:整個函數(shù)同樣也是從整個字符串來匹配,但是這個函數(shù)是吧整個字符串所以滿足正則表達式的子串以列表的形式返回(前面的函數(shù)都是返回一個對象,需要用group()函數(shù)來獲取對象的子串),而這個函數(shù)是直接返回一個含有全部子串的列表

    示例:

    import re
    ret=re.findall('\d+','123www555abc789')
    print(ret)
    #輸出結果:['123', '555', '789']

    4.re.finditer() 函數(shù)

    格式:

    re.finditer('正則表達式','字符串')

    說明:這個函數(shù)跟re.findall() 差不多,只是前者是返回一個迭代器(需要用循環(huán)去依次獲取里面的對象),而后者是返回一個列表

    示例:

    import re
    ret=re.finditer('\d+','Python999,C++555,Java666')
    print(ret) #輸出的是迭代器地址
    for i in ret:
        print(i.group(),end=' ')
    #輸出結果:<callable_iterator object at 0x000001E35504B5E0>
    #         999 555 666

    5.re.split() 函數(shù)

    split()整個函數(shù)在之前的字符串操作初步講過,是一個切割函數(shù)Python學習------起步7(字符串的連接、刪除、修改、查詢與統(tǒng)計、類型判斷及字符串字母大小寫轉(zhuǎn)換)_Python歐尼醬的博客-CSDN博客

    格式:

    re.split(pat,string,times)

    參數(shù)說明:

    pat:是正則表達式

    string:是字符串

    times:是分割次數(shù)

    功能作用:在整個字符串中,根據(jù)匹配成功的子串作為切割點,對字符串進行切割,然后返回一個列表類型

    示例:

    import re
    cut=re.split('\d','hello 1 my 2 friend')
    print(cut)
    #輸出結果:['hello ', ' my ', ' friend']
     
    cut_1=re.split(r':| ','Jack say:"I can do this all day"') #r表示后面為原字符串
    print(cut_1)
    #輸出結果:['Jack', 'say', '"I', 'can', 'do', 'this', 'all', 'day"']

    6.re.sub() 函數(shù)

    格式:

    re.sub(pat,repalc,string,count,flag)

    參數(shù):

    pat:是表示正則表達式

    replac:是要替換的字符串或者函數(shù)(必寫)

    string:是匹配的字符串

    count:是替換的最大次數(shù),如果不寫就默認全部替換

    flag:可選參數(shù),標志符,用于控制正則表達式的匹配條件

    功能說明:sub是substitute的縮寫,意思是取代,這個函數(shù)可以將匹配到的子串進行取代替換,然后返回一個字符串類型

    import re
    kun=re.sub('\d[A-Z]','鶩','hello,4Baww5Kc8P')
    print(kun)
    #輸出結果:hello,鶩aww鶩c鶩
     
     
    KUN=re.sub('\d[A-Z]','鶩','hello,4Baww5Kc8P',count=2)  #這里設置了count的值為2
    print(KUN)
    #輸出結果:hello,鶩aww鶩c8P

    7.re.subn() 函數(shù)

    re.subn(pat,repalc,string,count,flag)

    參數(shù):

    pat:是表示正則表達式

    replac:是要替換的字符串或者函數(shù)(必寫)

    string:是匹配的字符串

    count:是替換的最大次數(shù),如果不寫就默認全部替換

    flag:可選參數(shù),標志符,用于控制正則表達式的匹配條件

    說明:這個函數(shù)的用法跟re.sub() 的用法是一樣的,只是返回值不一樣,這個函數(shù)的返回值是一個元組,格式:('返回的字符串','次數(shù)')

    import re
    def rep(temp):
        temp='GBT'
        return temp
    su=re.subn('\d+',rep,'hao,w1q2d3') #不設置count,此時就是全部的替換次數(shù)
    print(su)
    #輸出結果:('hao,wGBTqGBTdGBT', 3)

    讀到這里,這篇“Python正則表達式模塊之re模塊怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內(nèi)容的文章,歡迎關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    AI