1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        5分鐘速覽python正則表達(dá)式常用函數(shù)

        共 4248字,需瀏覽 9分鐘

         ·

        2021-02-27 13:37

        00 導(dǎo)讀

        大家好,歡迎來(lái)到 Crossin的編程教室 !


        正則表達(dá)式是處理字符串類型的"核武器",不僅速度快,而且功能強(qiáng)大。本文不過(guò)多展開(kāi)正則表達(dá)式相關(guān)語(yǔ)法,僅簡(jiǎ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á)式式對(duì)象(re.pattern),命名為pattern,用于匹配2-5位小寫(xiě)字母的模式串。后續(xù)在使用其他正則表達(dá)式函數(shù)時(shí),即可使用pattern進(jìn)行方法調(diào)用。


        • 匹配:match

        match函數(shù)用于從文本串的起始位置開(kāi)始匹配,若匹配成功,則返回相應(yīng)的匹配對(duì)象,此時(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è)匹配對(duì)象,否則返回None


        • 搜索:search

        match只提供了從文本串起始位置匹配的結(jié)果,如果想從任意位置匹配,則可調(diào)用search方法,與match方法類似,當(dāng)任意位置匹配成功,則立即返回一個(gè)匹配對(duì)象,也可調(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ū)別在于前者是從起始位置開(kāi)始匹配,而后者從任意位置匹配,匹配成功則返回一個(gè)match對(duì)象。

        • 全搜索:findall/finditer

        幾乎是最常用的正則表達(dá)式函數(shù),用于尋找所有匹配的結(jié)果,例如在爬蟲(chóng)信息提取中,可非常方便地提取所有匹配字段
        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è)列表對(duì)象類型,當(dāng)無(wú)匹配對(duì)象時(shí),返回一個(gè)空列表。為了避免因同時(shí)返回大量匹配結(jié)果占用過(guò)多內(nèi)存,可以調(diào)用finditer函數(shù)返回一個(gè)迭代器類型,其中每個(gè)迭代元素是一個(gè)match對(duì)象,可繼續(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)匹配模式串較為簡(jiǎn)單或者僅需單詞調(diào)用時(shí),上述所有方法也可直接調(diào)用re類函數(shù),而無(wú)需事先編譯。此時(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)需要對(duì)文本串進(jìn)行條件替換時(shí),可調(diào)用re.sub實(shí)現(xiàn)(當(dāng)然也可先編譯后再用調(diào)用實(shí)例方法),相應(yīng)參數(shù)分別為模式串、替換格式、文本串,還可以通過(guò)增加缺省參數(shù)限定替換次數(shù)和匹配模式。通過(guò)在模式串進(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á)式庫(kù)regex可供選擇


        如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~


        作者:luanhz
        來(lái)源:小數(shù)志


        _往期文章推薦_

        爬蟲(chóng)利器:正則表達(dá)式簡(jiǎn)明手冊(cè)




        瀏覽 52
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            三级影片免费看 | 韩国一级黄| 俺去也激情 | 蜜桃婷婷狠狠久久综合9色第1集 | 能看的操逼网站 | 国产一级大黄 | 国产精品久久久久久免费播放 | 男的操女的国产 | 绿巨人破解版 | 超碰人人爱人人 |