亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > regex > 正文

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

2020-01-20 21:34:37
字體:
來源:轉載
供稿:網友

正則表達式:

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

​ 什么是正則表達式: 一套規則 - 匹配字符串的

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

​ 正則表達式能做什么:

•1.檢測一個輸入的字符串是否合法 -- web開發項目 表單驗證 ◦用戶輸入一個內容的時候,我們要提前做檢測
◦能夠提高程序的效率并且減輕服務器的壓力

•2.從一個大文件中找到所有符合規則的內容 -- 日志分析/爬蟲 ◦能夠高效的從一大段文字中快速找到符合規則的內容

字符組 : [字符組]

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

元字符:

        字符:

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

量詞:

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

            #判斷用戶輸入的內容是否合法,如果用戶輸入的對就能查到結果,如果輸入的不對就不能查到結果
                 ^1[3-9]/d{9}$
            # 從一個大文件中找到所有符合規則的內容
                 1[3-9]/d{9}  

轉義符:

 原本有特殊意義的字符,到了表達它本身的意義的時候,需要轉義。     

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

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

貪婪匹配:

 1.貪婪匹配:在量詞范圍允許的情況下,盡量多的匹配內容     .*x 表示匹配任意字符 任意多次數 遇到最后一個x才停下來    回溯算法:  2.非貪婪(惰性)匹配: 總是在量詞范圍內盡量少的匹配內容。前面的*,+等都是貪婪匹配,也就是盡可能匹配,后面加?號使其變成惰性匹配    .*?x 表示匹配任意字符 任意多次數 但是一旦遇到x就停下來  .+?x 匹配任意內容至少1次 遇到x就停止    元字符+量詞+? ---> 惰性匹配    幾個常用的非貪婪匹配:   *? 重復任意次,但盡可能少重復   +? 重復1次或更多次,但盡可能少重復   ?? 重復0次或1次,但盡可能少重復   {n,m}? 重復n到m次,但盡可能少重復   {n,}? 重復n次以上,但盡可能少重復   例:匹配身份證號碼:18/15位的身份證號 # 15位:首位數字為1-9,總共15位  [1-9]/d{14} # 18位:首位數字為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}   #從一個大文件中找到所有符合規則的內容。表示先匹配[1-9]/d{16}[0-9x]如果沒有匹配上就匹配[1-9]/d{14}  ^([1-9]/d{16}[0-9x]|[1-9]/d{14})$  #檢測一個輸入的字符串是否合法 #2:簡化  [1-9]/d{14}(/d{2}[/dx])?  #從一個大文件中找到所有符合規則的內容  ^[1-9]/d{14}(/d{2}[/dx])?$  #檢測一個輸入的字符串是否合法 。()表示分組,將/d{2}[/dx]分成一組,就可以整體約束他們出現的次數為0-1次  例: 規則:1/d*?3 待匹配內容:1243333344  匹配結果:1243 規則:1/d*3  待匹配內容:1243333344  匹配結果:12433333re模塊:# findall 還是按照完整的正則進行匹配,只是顯示括號里匹配到的內容。 取所有符合條件的,優先顯示分組中的。 ret = re.findall('9/d/d','19740ash93010uru') print(ret)#['974', '930'] ret = re.findall('9(/d)/d','19740ash93010uru') print(ret)#['7', '3']# search 還是按照完整的正則進行匹配,顯示也顯示匹配到的第一個內容,但是我們可以通過給group方法傳參數,來獲取具體分組,即()中的內容。 search 只取第一個符合條件的,沒有優先顯示這件事兒 得到的結果是一個變量  變量.group() 的結果 完全和 變量.group(0)的結果一致  變量.group(n) 的形式來指定獲取第n個分組中匹配到的內容 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 默認不寫  print(ret.group(1))#7  print(ret.group(2))#4# 為什么在search中不需要分組優先 而在findall中需要? 加上括號是為了對真正需要的內容進行提取。 為什么要用分組? 把想要的內容放分組里 如果我們要查找的內容在一個復雜的環境中,我們要查的內容并沒有一個突出的 與眾不同的特點 甚至會和不需要的雜亂的數據混合在一起,這個時候我們就需要把所有的數據都統計出來,然后對這個數據進行篩選,把我們真正需要的數據對應的正則表達式用()圈起來,這樣我們就可以篩選出真正需要的數據了。# 如何取消分組優先 如果在寫正則的時候由于不得已的原因,導致不要的內容也得寫在分組里,通過 ?: 取消這個分組的優先顯示 # (?:) 取消這個分組的優先顯示#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中匹配出第一個加法,第一個減法, a+b 或者是a-b 并且計算他們的結果  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) #除了 霸王別姬,其他電影都是 肖申克的救贖 這種格式的。 (.*?) 要顯示的電影名 其中 ?是非貪婪匹配的標志 (?:/s*<span class="title">.*?</span>)? ?: 取消這個分組的優先顯示,整個()內都不顯示  /s* 兩行代碼之間所有的空字符  .*? 電影英文名         ? 該部分出現0次 或者1次# 什么是爬蟲 # 通過代碼獲取到一個網頁的源碼,需要的是源碼中嵌著的網頁上的內容 -- 正則表達式 #先安裝擴展模塊 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'))

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线亚洲在线| 日本久久久a级免费| 狠狠久久亚洲欧美专区| 亚洲国产精品专区久久| 在线视频欧美日韩精品| 91久久久久久久久久久久久| 色悠悠久久88| 亚洲一区二区黄| 欧美限制级电影在线观看| 欧美日韩国产综合视频在线观看中文| 精品国产欧美成人夜夜嗨| 日韩精品免费在线播放| 日韩视频在线免费| 日韩欧美极品在线观看| 国产精品mp4| 久久久久国产精品一区| 亚洲欧美在线免费| 国外成人在线播放| 久久大大胆人体| 国产一区二区三区四区福利| 欧美成人精品xxx| 亚洲性69xxxbbb| 精品国产乱码久久久久久虫虫漫画| 亚洲色图av在线| 亚洲色图第一页| 爱福利视频一区| 一区二区三区视频观看| 九九热最新视频//这里只有精品| 91精品视频免费观看| 欧美理论片在线观看| 欧美性生交xxxxx久久久| 亚洲性无码av在线| 亚洲国产精彩中文乱码av| 欧美电影《睫毛膏》| 欧美在线一区二区视频| 亚洲性日韩精品一区二区| 久久视频在线直播| 亚洲精品一区中文| 不卡av在线播放| 欧美性猛交xxxxx水多| 久久久久久久久久久久av| 日韩不卡在线观看| 92看片淫黄大片看国产片| 亚洲一区二区少妇| 日韩欧美精品网址| 日本欧美在线视频| 91av视频导航| 亚洲www在线| 国产啪精品视频网站| 亚洲黄色www| 国产精品伦子伦免费视频| 日韩av影片在线观看| 日韩av综合网| 久久精品视频亚洲| 92福利视频午夜1000合集在线观看| 中文精品99久久国产香蕉| 国产成人一区二区在线| 亚洲国内精品视频| 久久九九热免费视频| 亚洲精品久久久一区二区三区| 日本精品一区二区三区在线播放视频| 欧美激情精品久久久久久变态| 在线国产精品视频| 国产亚洲欧美日韩精品| 久久国产色av| 欧美亚洲免费电影| 欧美日韩综合视频| 亚洲视频欧美视频| 成人免费观看网址| 欧美激情免费在线| 日韩在线高清视频| 国产精品一区二区三区久久久| 国产精品成人久久久久| 色综久久综合桃花网| 日韩欧美视频一区二区三区| 精品国产老师黑色丝袜高跟鞋| 亚洲精品电影网在线观看| 在线看国产精品| 91av成人在线| 久久久久久久国产精品视频| 亚洲午夜精品久久久久久久久久久久| 57pao成人永久免费视频| 亚洲色图色老头| 国产精品网站入口| 精品一区电影国产| 国产一区二区日韩精品欧美精品| 欧美精品福利在线| 国产精品爽爽爽爽爽爽在线观看| 91精品国产高清久久久久久久久| 欧美日韩电影在线观看| 亲子乱一区二区三区电影| 亚洲人成在线电影| 国产精品一区二区久久国产| 亚洲图片制服诱惑| 国产成人啪精品视频免费网| 亚洲欧洲一区二区三区久久| 久久五月天色综合| 久久手机免费视频| 亚洲一级黄色av| 成人免费自拍视频| 亚洲成人在线网| 亚洲视频国产视频| 亚洲视频专区在线| 久久久91精品| 久久亚洲国产精品成人av秋霞| 亚洲a级在线播放观看| 亚洲人成在线观看网站高清| 欧美人在线观看| 国产精品a久久久久久| 亚洲精品欧美极品| 亚洲黄色在线观看| 成人性生交大片免费观看嘿嘿视频| 91亚洲精品在线观看| 欧美激情按摩在线| 精品动漫一区二区| 日韩欧中文字幕| 日韩精品中文字幕在线观看| 欧美日韩国产影院| 精品亚洲夜色av98在线观看| 日韩精品在线观| 97精品国产97久久久久久免费| 欧美性理论片在线观看片免费| 欧美一区二区视频97| 亚洲一区二区三区视频播放| 欧美在线视频观看免费网站| 欧美肥老太性生活视频| 日韩成人高清在线| 欧美激情精品在线| 久久91亚洲人成电影网站| 中文字幕不卡av| 亚洲一区二区三区xxx视频| 色综合视频一区中文字幕| 国产一区二区在线免费视频| 亚洲天堂av图片| 日韩中文字幕免费视频| 青草热久免费精品视频| 成人夜晚看av| 国产精品情侣自拍| 最新国产成人av网站网址麻豆| 欧美老女人在线视频| 亚洲男人天堂2019| 日韩精品视频在线播放| 91精品久久久久久久久久久久久| 亚洲国产天堂久久综合| 久久精品国产欧美亚洲人人爽| 欧美日在线观看| 国产精品久久久久久久久久ktv| 668精品在线视频| 亚洲国产精品成人一区二区| 亚洲精品日韩久久久| 欧美国产日韩精品| 国产精品观看在线亚洲人成网| 久久精品中文字幕电影| 久久精品色欧美aⅴ一区二区| 国产精品视频一区二区高潮| 精品久久久国产精品999| 疯狂做受xxxx欧美肥白少妇| 精品爽片免费看久久| 国产欧美一区二区三区久久人妖| 精品女同一区二区三区在线播放| 欧洲亚洲妇女av| 久久精品最新地址| 成人网在线免费看| 国产精品久久99久久|