久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      深入淺析正則表達(dá)式re模塊(部分)

      正則表達(dá)式:

      官方定義:正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。

      ​ 什么是正則表達(dá)式: 一套規(guī)則 – 匹配字符串的

      ​ 談到正則,就只和字符串相關(guān)了。我們要考慮的是在同一個(gè)位置上可以出現(xiàn)的字符的范圍。

      ​ 正則表達(dá)式能做什么:

      •1.檢測一個(gè)輸入的字符串是否合法 — web開發(fā)項(xiàng)目 表單驗(yàn)證 ◦用戶輸入一個(gè)內(nèi)容的時(shí)候,我們要提前做檢測
      ◦能夠提高程序的效率并且減輕服務(wù)器的壓力

      •2.從一個(gè)大文件中找到所有符合規(guī)則的內(nèi)容 — 日志分析爬蟲 ◦能夠高效的從一大段文字中快速找到符合規(guī)則的內(nèi)容

      字符組 : [字符組]

      在同一個(gè)位置可能出現(xiàn)的各種字符組成了一個(gè)字符組,在正則表達(dá)式中用[]表示。一個(gè)中括號(hào)只表示一個(gè)字符位置
       字符分為很多類,比如數(shù)字、字母、標(biāo)點(diǎn)等等。假如你現(xiàn)在要求一個(gè)位置”只能出現(xiàn)一個(gè)數(shù)字”,那么這個(gè)位置上的字符只能是0、1、2…9這10個(gè)數(shù)之一。
           字符組 描述的是一個(gè)位置上能出現(xiàn)的所有可能性
          # 接受范圍,可以描述多個(gè)范圍,連著寫就可以了
          # [abc]    一個(gè)中括號(hào)只表示一個(gè)字符位置,匹配a或者b或者c
          # [0-9]     匹配數(shù)字0-9,根據(jù)ASCII進(jìn)行范圍的比對(duì)
          # [a-z]     匹配所有的小寫字母
          # [A-Z]     匹配所有的大寫字母
          # [a-zA-Z]  匹配所有的大小寫字母
          # [0-9a-z]
          # [0-9a-zA-Z_]

      元字符:

              字符:

              元字符           匹配內(nèi)容的規(guī)則
              .               匹配除換行符以外的任意字符
              w              匹配字母或數(shù)字或下劃線
              s              匹配任意的空白符
              d              匹配數(shù)字
              n              匹配一個(gè)換行符
              t              匹配一個(gè)制表符
              b              匹配一個(gè)單詞的結(jié)尾
              ^               匹配一個(gè)字符串的開始
              $               匹配一個(gè)字符串的結(jié)尾
              W              匹配非字母或數(shù)字或下劃線
              D              匹配非數(shù)字
              S              匹配非空白符
              a|b             匹配字符a或字符b
              a表達(dá)式|b表達(dá)式   匹配a或者b表達(dá)式中的內(nèi)容,如果匹配a成功了,不會(huì)繼續(xù)和b匹配, 所以,如果兩個(gè)規(guī)則有重疊部分,總是把長的放在前面
              ()              分組,匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組。約束某一個(gè)元字符的作用范圍,只在()內(nèi)生效
              []              字符組,匹配字符組中的字符
              [^]             非字符組,匹配除了字符組中字符的所有字符
              在正則表達(dá)式中能夠幫助我們表示匹配的內(nèi)容的符號(hào)都是正則中的 元字符
              # [0-9]        –>  d   表示匹配一位任意數(shù)字 digit
              # [0-9a-zA-Z_] –>  w   表示匹配數(shù)字字母下劃線 word
              # 空格 –>
              # tab  –>  t
              # enter回車  –>  n
              # 空格,tab和回車 –> s  表示所有空白 包括空格 tab和回車
              # [d]  d  表示匹配數(shù)字
              # [dD] [wW] [sS]  表示匹配所有
              # [^d]  匹配所有的非數(shù)字
              # [^1]  匹配除數(shù)字1以外的所有  
              # [1-9]d 匹配兩位整數(shù)
              # [1357]d  匹配1,3,5,7,開頭的兩位整數(shù)
                    例1:匹配多個(gè)網(wǎng)址:
                   www.oldboy.com|www.baidu.com|www.jd.com|www.taobao.com     #.表示取消.的特殊意義
                   www.(oldboy|baidu|jd|taobao).com    #用() 來約束 | 描述的內(nèi)容的范圍      
              記憶元字符 : 都是表示能匹配哪些內(nèi)容,一個(gè)元字符總是表示一個(gè)字符位置上的內(nèi)容
              # d w s t n D W S
              # [] [^] .
              # ^ $
              # | ()

      量詞:

              量詞  用法說明
              *      重復(fù)0次或更多次,表示0次或多次    {0,}
              +      重復(fù)1次或更多次,表示1次或多次    {1,}
              ?      重復(fù)0次或1次,表示匹配0次或1次    {0,1}
              {n}    重復(fù)n次,表示匹配n次
              {n,}   重復(fù)n次或更多次,表示匹配至少n次
              {n,m}  重復(fù)n到m次,表示至少匹配n次,至多m次
              例:
                  匹配整數(shù) d+
                  匹配小數(shù) d+.d+
                  匹配整數(shù)或小數(shù) : d+.?d* #存在問題,比如1.也會(huì)被匹配到   —>  分組的作用 : d+(.d+)?
              例:匹配手機(jī)號(hào)碼,手機(jī)號(hào)以1開頭,第二位為3-9,總共11位             
                  1[3-9]d{9}

                  #判斷用戶輸入的內(nèi)容是否合法,如果用戶輸入的對(duì)就能查到結(jié)果,如果輸入的不對(duì)就不能查到結(jié)果
                       ^1[3-9]d{9}$
                  # 從一個(gè)大文件中找到所有符合規(guī)則的內(nèi)容
                       1[3-9]d{9}  

      轉(zhuǎn)義符:

       原本有特殊意義的字符,到了表達(dá)它本身的意義的時(shí)候,需要轉(zhuǎn)義。     

           . 有特殊的意義,取消特殊的意義.

        有一些有特殊意義的內(nèi)容,放在字符組中,會(huì)取消它的特殊意義
                      #只表示符號(hào)本身
                [().*+?] 所有的內(nèi)容在字符組中會(huì)取消它的特殊意義        
               #表示:a-c (a減c)
                [a-c]  -在字符組中表示范圍,如果不希望它表示范圍,需要轉(zhuǎn)義,或者放在字符組的最前面最后面 。
       取消一個(gè)元字符的特殊意義有兩種方法:
              1. 在這個(gè)元字符前面加
              2. 對(duì)一部分字符生效,把這個(gè)元字符放在字符組里
                  # [.()+?*]

      貪婪匹配:

         1.貪婪匹配:在量詞范圍允許的情況下,盡量多的匹配內(nèi)容       .*x 表示匹配任意字符 任意多次數(shù) 遇到最后一個(gè)x才停下來      回溯算法:    2.非貪婪(惰性)匹配: 總是在量詞范圍內(nèi)盡量少的匹配內(nèi)容。前面的*,+等都是貪婪匹配,也就是盡可能匹配,后面加?號(hào)使其變成惰性匹配      .*?x 表示匹配任意字符 任意多次數(shù) 但是一旦遇到x就停下來    .+?x 匹配任意內(nèi)容至少1次 遇到x就停止      元字符+量詞+? ---> 惰性匹配      幾個(gè)常用的非貪婪匹配:     *? 重復(fù)任意次,但盡可能少重復(fù)     +? 重復(fù)1次或更多次,但盡可能少重復(fù)     ?? 重復(fù)0次或1次,但盡可能少重復(fù)     {n,m}? 重復(fù)n到m次,但盡可能少重復(fù)     {n,}? 重復(fù)n次以上,但盡可能少重復(fù)     例:匹配身份證號(hào)碼:18/15位的身份證號(hào)   # 15位:首位數(shù)字為1-9,總共15位    [1-9]d{14}   # 18位:首位數(shù)字為1-9,末位為0-9或者X,總共18位     [1-9]d{16}[dx]     [1-9]d{16}[0-9x]   #1:    [1-9]d{16}[0-9x]|[1-9]d{14}   #從一個(gè)大文件中找到所有符合規(guī)則的內(nèi)容。表示先匹配[1-9]d{16}[0-9x]如果沒有匹配上就匹配[1-9]d{14}    ^([1-9]d{16}[0-9x]|[1-9]d{14})$  #檢測一個(gè)輸入的字符串是否合法   #2:簡化    [1-9]d{14}(d{2}[dx])?  #從一個(gè)大文件中找到所有符合規(guī)則的內(nèi)容    ^[1-9]d{14}(d{2}[dx])?$  #檢測一個(gè)輸入的字符串是否合法 。()表示分組,將d{2}[dx]分成一組,就可以整體約束他們出現(xiàn)的次數(shù)為0-1次    例:   規(guī)則:1d*?3 待匹配內(nèi)容:1243333344  匹配結(jié)果:1243   規(guī)則:1d*3  待匹配內(nèi)容:1243333344  匹配結(jié)果:12433333  re模塊:  # findall 還是按照完整的正則進(jìn)行匹配,只是顯示括號(hào)里匹配到的內(nèi)容。 取所有符合條件的,優(yōu)先顯示分組中的。   ret = re.findall('9dd','19740ash93010uru')   print(ret)#['974', '930']   ret = re.findall('9(d)d','19740ash93010uru')   print(ret)#['7', '3']  # search 還是按照完整的正則進(jìn)行匹配,顯示也顯示匹配到的第一個(gè)內(nèi)容,但是我們可以通過給group方法傳參數(shù),來獲取具體分組,即()中的內(nèi)容。   search 只取第一個(gè)符合條件的,沒有優(yōu)先顯示這件事兒   得到的結(jié)果是一個(gè)變量    變量.group() 的結(jié)果 完全和 變量.group(0)的結(jié)果一致    變量.group(n) 的形式來指定獲取第n個(gè)分組中匹配到的內(nèi)容   ret = re.search('9(d)(d)','19740ash93010uru')   print(ret) # 變量 <_sre.SRE_Match object; span=(1, 4), match='974'>   if ret:    print(ret.group())#974 #ret.group(0) 0 默認(rèn)不寫    print(ret.group(1))#7    print(ret.group(2))#4  # 為什么在search中不需要分組優(yōu)先 而在findall中需要?   加上括號(hào)是為了對(duì)真正需要的內(nèi)容進(jìn)行提取。 為什么要用分組? 把想要的內(nèi)容放分組里   如果我們要查找的內(nèi)容在一個(gè)復(fù)雜的環(huán)境中,我們要查的內(nèi)容并沒有一個(gè)突出的 與眾不同的特點(diǎn) 甚至?xí)筒恍枰碾s亂的數(shù)據(jù)混合在一起,這個(gè)時(shí)候我們就需要把所有的數(shù)據(jù)都統(tǒng)計(jì)出來,然后對(duì)這個(gè)數(shù)據(jù)進(jìn)行篩選,把我們真正需要的數(shù)據(jù)對(duì)應(yīng)的正則表達(dá)式用()圈起來,這樣我們就可以篩選出真正需要的數(shù)據(jù)了。  # 如何取消分組優(yōu)先   如果在寫正則的時(shí)候由于不得已的原因,導(dǎo)致不要的內(nèi)容也得寫在分組里,通過 ?: 取消這個(gè)分組的優(yōu)先顯示   # (?:) 取消這個(gè)分組的優(yōu)先顯示  #findall   ret = re.findall('<w+>(w+)</w+>','<h1>askh930s02391j192agsj</h1>')   print(ret)#['askh930s02391j192agsj']  # search   ret = re.search('<(w+)>(w+)</w+>','<h1>askh930s02391j192agsj</h1>')   print(ret.group())#<h1>askh930s02391j192agsj</h1>   print(ret.group(1))#h1   print(ret.group(2))#askh930s02391j192agsj  #從exp中匹配出第一個(gè)加法,第一個(gè)減法, a+b 或者是a-b 并且計(jì)算他們的結(jié)果    exp = '2-3*(5+6)'    ret = re.search('(d+)[+](d+)',exp)    print(ret)    print(ret.group(1))#5    print(ret.group(2))#6    print(int(ret.group(1)) + int(ret.group(2)))#11   #將豆瓣源碼放到douban.html,從中獲取電影名:   with open('douban.html',encoding='utf-8') as f:    content = f.read()   ret = re.findall('<span class="title">(.*?)</span>(?:s*<span class="title">.*?</span>)?',content)   print(ret)   #除了 霸王別姬,其他電影都是 肖申克的救贖 這種格式的。   (.*?) 要顯示的電影名 其中 ?是非貪婪匹配的標(biāo)志   (?:s*<span class="title">.*?</span>)?   ?: 取消這個(gè)分組的優(yōu)先顯示,整個(gè)()內(nèi)都不顯示  s* 兩行代碼之間所有的空字符    .*? 電影英文名         ? 該部分出現(xiàn)0次 或者1次  # 什么是爬蟲   # 通過代碼獲取到一個(gè)網(wǎng)頁的源碼,需要的是源碼中嵌著的網(wǎng)頁上的內(nèi)容 -- 正則表達(dá)式   #先安裝擴(kuò)展模塊 File--Settings--Project Interpreter-- + --找到包---Install Package   import requests   ret = requests.get('https://movie.douban.com/top250?start=0&filter=')   print(ret.content.decode('utf-8'))

      總結(jié)

      以上所述是小編給大家介紹的深入淺析正則表達(dá)式re模塊(部分),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)網(wǎng)站的支持!
      如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)