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>

        Python中正則表達(dá)式模塊詳解

        共 3646字,需瀏覽 8分鐘

         ·

        2020-09-16 11:29

        作者:python
        來(lái)源:SegmentFault 思否社區(qū)



        正則表達(dá)式

        用來(lái)處理字符串,對(duì)字符串進(jìn)行檢索和替換,另外正則在python爬蟲(chóng)的應(yīng)用也是相當(dāng)廣泛!?

        特點(diǎn)
        • 靈活性、邏輯性和功能性非常強(qiáng)?
        • 可以迅速地用極簡(jiǎn)單的方式達(dá)到字符串的復(fù)雜控制

        正則語(yǔ)法

        `#?1、數(shù)字和字母都表示它本身,?.?表示匹配除了換行以外的任意字符,????.?表示匹配?.
        #?2、很多字母前面添加??會(huì)有特殊含義
        ????-?n:換行
        ????- t:制表符
        ????-?d:?匹配數(shù)字,等價(jià)[0-9]
        ????-?D:非數(shù)字,等價(jià)于[^0-9]
        ????-?w:表示數(shù)字、字母以及下劃線(xiàn),中文,等價(jià)于[0-9a-zA-Z_]
        ????- W:表示w取反
        ????-?s:表示任意的非打印字符(空格、換行、制表符)
        ????-?S:表示非空白字符
        #?3、絕大多數(shù)標(biāo)點(diǎn)都有特殊含義
        ????-?():用來(lái)表示一個(gè)分組,如果需要表示括號(hào),需要使用?
        ????-?[]:?匹配范圍,[0-9]?表示0~9范圍中的一個(gè),[0-9a-zA-Z]
        ????-?|:?表示或者的意思?re.search(r'f(x|y|z)m','pdsfxm')???匹配fxm
        ????-?{},{2,},{,3},{1,3}:用來(lái)限定前面元素出現(xiàn)的次數(shù)??re.search(r'go{2}d','good')
        ????-?*:?表示前面的元素出現(xiàn)的次數(shù)為0次及以上,等價(jià)于{0,}
        ????-?+:?表示前面的元素出現(xiàn)的次數(shù)為1次及以上,等價(jià)于{1,}
        ????-?^:以指定的內(nèi)容開(kāi)頭,或者取反的意思
        ????-?$:以指定的內(nèi)容結(jié)尾
        #?4、???的兩種用法
        ????-?規(guī)定前面元素出現(xiàn)的次數(shù)最多只能出現(xiàn)1次,等價(jià)于{,1}
        ????-?將貪婪模式轉(zhuǎn)換為非貪婪模式(重點(diǎn))`?



        re模塊的介紹


        XM返傭 https://www.fx61.com/brokerlist/xm.html
        該模塊是python中專(zhuān)門(mén)用于處理正則的默認(rèn),提供了相關(guān)的方法

        常用方法


        • match、search 只查詢(xún)一次

        • finditer 查找到所有的匹配數(shù)據(jù)放到一個(gè)可迭代對(duì)象中

        • findall 把查找到的所有字符串結(jié)果放到一個(gè)列表中

        • fullmatch 完全匹配,字符串需要滿(mǎn)足正則表達(dá)式



        Match類(lèi)的使用


        調(diào)用re.match,re.search或者對(duì)re.finditer的遍歷返回的對(duì)象都是re.Match對(duì)象

        Match類(lèi)的屬性和方法


        • pos、endpos 被查找字符串的起始和終端位置
        • span( ) 匹配到的下標(biāo)位置(元組)
        • group 分組的概念
        `import?re

        m?=?re.search(r'c.*z',?'abcdefgz')
        print(m.pos)??#?0
        print(m.endpos)??#?8
        print(m.span())??#?(2,?8)
        #?使用group獲取獲取到匹配的字符串
        print(m.group())?#?cdefgz

        #?group表示正則表達(dá)式的分組
        #?1、在正則表達(dá)式里使用()表示一個(gè)分組
        #?2、如果沒(méi)有分組,默認(rèn)只有一組
        #?3、分組的下標(biāo)從0開(kāi)始

        #?這里有4個(gè)分組?
        m1?=?re.search(r'(1.*)(2.*)(3.*4)',?'a1bcd2efgh3ij4k')
        print(m1.group())??#?默認(rèn)就是第0組??1bcd2efgh3ij4
        print(m1.group(0))??#?第0組就是把整個(gè)正則表達(dá)式當(dāng)做一個(gè)整體??1bcd2efgh3ij4
        print(m1.group(1))??#?1bcd
        print(m1.group(2))??#?2efgh
        print(m1.group(3))??#?3ij4

        #??groups()?將分組以元組的形式返回
        print(m1.groups())??#?('1bcd',?'2efgh',?'3ij4')

        #?(?P?表達(dá)式)?給分組取個(gè)名字
        m2?=?re.search(r'(?P1.*)(?P2.*)(?P3.*4)',?'a1bcd2efgh3ij4k')
        print(m2.groupdict())??#?{'one':?'1bcd',?'two':?'2efgh',?'three':?'3ij4'}`?


        • compile?
          在re模塊,可以使用re.方法調(diào)用函數(shù),還可以調(diào)用re.compile得到一個(gè)對(duì)象
        `import?re

        #?這兩種寫(xiě)法沒(méi)有區(qū)別
        m?=?re.search(r'm.*a',?'111m22222a')
        print(m)??#?

        m2?=?re.compile(r'm.*a')
        result?=?m2.search('111m22222a')
        print(result)?#?`?



        正則修飾符


        正則修飾符是對(duì)表達(dá)式進(jìn)行修飾
        • re.I 使匹配對(duì)大小寫(xiě)不敏感
        • re.M 多行匹配,影響 ^ 和$
        • re.S 使 . 匹配包括換行在內(nèi)的所有字符

        `import?re

        #?.?表示除了換行以外的任意字符
        x?=?re.search(r'm.*a',?'abcdmonxxxa')
        print(x)??#?None

        #?re.S?匹配換行
        y?=?re.search(r'm.*a',?'abcdmonxxxa',?re.S)??#?讓?.?匹配換行
        print(y)

        a?=?re.search(r'x',?'helloXyz')
        print(a)??#?None
        #?re.I?忽略大小寫(xiě)
        b?=?re.search(r'x',?'helloXyz',?re.I)
        print(b)??#?

        #?re.M?讓$?匹配到換行
        m?=?re.findall(r'w+$',?'i?am?boyn?you?are?girln?he?is?man')
        print(m)??#?['man']
        n?=?re.findall(r'w+$',?'i?am?boyn?you?are?girln?he?is?man',?re.M)
        print(n)?#?['boy',?'girl',?'man']`?



        正則替換

        sub
        `import?re

        #?把數(shù)字替換成x
        m?=?re.sub(r'd',?'x',?'hello123wor123ld')
        print(m)??#?helloxxxworxxxld

        n?=?re.sub(r'd+',?'x',?'hello123wor123ld')
        print(n)?#?helloxworxld

        #?需求:將p中內(nèi)容的數(shù)字乘2
        p?=?'hello50good34'
        def?test(x):
        ????y?=?int(x.group(0))
        ????y?*=?2
        ????return?str(y)??#?這里只能以字符串的形式返回

        print(re.sub(r'd+',?test,?p))?#?hello100good68`?


        貪婪模式與非貪婪模式


        在正則表達(dá)式里,默認(rèn)采用的是貪婪模式,盡可能匹配多的字符串 在貪婪模式后面添加?,可將貪婪模式轉(zhuǎn)化為非貪婪模式

        import?re

        m?=?re.search(r'm.*a',?'abcm123a456a')
        print(m)??# m123a456a,這里為什么不是m123a呢?因?yàn)檫@里默認(rèn)使用的貪婪模式
        n?=?re.search(r'm.*?a',?'abcm123a456a')
        print(n)??#?m123a????使用?將貪婪模式轉(zhuǎn)化為非貪婪模式

        #??
        print(re.match(r'aa(d+)',?'aa123bb456').group(1))??#?123
        print(re.match(r'aa(d+?)',?'aa123bb456').group(1))??#?1
        print(re.match(r'aa(d+?)',?'aa123bb456').group(0))??#?aa1

        #?雖然說(shuō)是盡可能少的匹配,但也要滿(mǎn)足匹配呀
        print(re.match(r'aaa(d+)ddd',?'aaa2333ddd').group(0))??#?aaa2333ddd
        print(re.match(r'aaa(d+?)ddd',?'aaa2333ddd').group(1))??#?2333

        print(re.match(r'aaa(d+).*',?'aaa2333ddd').group(0))??#?aaa2333ddd
        print(re.match(r'aaa(d+?).*',?'aaa2333ddd').group(1))??#?2



        點(diǎn)擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開(kāi)更多互動(dòng)和交流。


        -?END -

        瀏覽 29
        點(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>
            久久综合九色 | 黄色操逼视频。 | 草久视频| 3d啪啪动漫精品少妇 | 五月激情视频 | 成人免费视频在线观看入口 | 日韩在线黄色电影 | 国产剧情一级乱偷人电影影 | 国产三级韩国三级日本带黄 | 欧美黑鸡巴 |