黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python 入門之 內(nèi)置模塊 -- re模塊

系統(tǒng) 2107 0

Python 入門之 內(nèi)置模塊 -- re模塊

1、re 模塊

(1)什么是正則?

正則就是用一些具有特殊含義的符號(hào)組合到一起(稱為正則表達(dá)式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規(guī)則。 (在Python中)它內(nèi)嵌在Python中,并通過 re 模塊實(shí)現(xiàn)。正則表達(dá)式模式被編譯成一系列的字節(jié)碼,然后由用 C 編寫的匹配引擎執(zhí)行。

元字符 匹配內(nèi)容
\w 匹配字母(包含中文)或數(shù)字或下劃線
\W 匹配非字母(包含中文)或數(shù)字或下劃線
\s 匹配任意的空白符
\S 匹配任意非空白符
\d 匹配數(shù)字
\D 匹配非數(shù)字
\A 從字符串開頭匹配
\z 匹配字符串的結(jié)束,如果是換行,只匹配到換行前的結(jié)果
\n 匹配一個(gè)換行符
\t 匹配一個(gè)制表符
^ 匹配字符串的開始
$ 匹配字符串的結(jié)尾
. 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符。
[...] 匹配字符組中的字符
... 匹配除了字符組中的字符的所有字符
* 匹配0個(gè)或者多個(gè)左邊的字符。
+ 匹配一個(gè)或者多個(gè)左邊的字符。
匹配0個(gè)或者1個(gè)左邊的字符,非貪婪方式。
{n} 精準(zhǔn)匹配n個(gè)前面的表達(dá)式。
{n,m} 匹配n到m次由前面的正則表達(dá)式定義的片段,貪婪方式
ab 匹配a或者b
() 匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組

---------------------------------------------------------------------匹配模式-------------------------------------------------------------------------

          
            import  re 
          
        

<1> \w 字母,數(shù)字,下劃線,中文

          
            print(re.findall("\w","小明-Marry_dsb123嘯天吃D早餐"))   # \w 字母.數(shù)字.下劃線.中文 
          
        

<2> \W 不是字母,數(shù)字,下劃線,中文

          
            print(re.findall("\W","小明-Marry_dsb123嘯天吃D早餐"))   # \w 不是字母.數(shù)字.下劃線.中文 
          
        

<3> \d 匹配數(shù)字

          
            print(re.findall("\d","十10⑩"))                       #  \d 匹配數(shù)字   
          
        

<4> \D 匹配非數(shù)字

          
            print(re.findall("\D","十10⑩"))                       # \D 匹配非數(shù)字
          
        

<5> \A 從字符串開頭匹配 以什么開頭 常用 ^a

          
            print(re.findall("\Aa","asfdasdfasdfalex"))
          
        
          
            print(re.findall("^a","alex"))                        # 以什么開頭  
          
        

<6> \Z 從字符串結(jié)尾匹配 以什么結(jié)尾 常用 $

          
            print(re.findall("d\Z","asfdasdfasdfalex"))
          
        
          
            print(re.findall("x$","alex"))                        # 匹配什么結(jié)尾  

          
        

<7> \n 匹配換行符

          
            print(re.findall("\n","alex\nwusir"))

          
        

<8> \t 匹配制表符

          
            print(re.findall("\t","alex\twusir"))

          
        

<9> 字符串 匹配相應(yīng)的字符串

          
            print(re.findall("alex","alex\twusiralex"))

          
        

<10> [...] 匹配字符組中的字符

          
            print(re.findall('[0-9]',"小明-Marry_dsb123嘯天吃D早餐"))                 
print(re.findall('[a-z]',"小明-Marry_dsb123嘯天吃D早餐"))
print(re.findall('[A-Z]',"小明-Marry_dsb123嘯天吃D早餐"))

          
        

<11> ^[ ] 匹配非字符組中的字符

          
            print(re.findall("[^0-9a-z]","123alex456"))  

          
        

<12> *匹配0個(gè)或多個(gè)左邊的字符 貪婪匹配

          
            print(re.findall("a*","marry,aa,aaaa,bbbbaaa,aaabbbaaa"))    # 匹配*左側(cè)字符串0次或多次  貪婪匹配

          
        

<13> +匹配1個(gè)或多個(gè)左邊的字符 貪婪匹配

          
            print(re.findall("a+","alex,aa,aaaa,bbbbaaa,aaabbbaaa"))  匹配左側(cè)字符串一次或多次  貪婪匹配 

          
        

<14> ?匹配0個(gè)或1個(gè)左邊的字符 非貪婪匹配

          
            print(re.findall("a?","alex,aa,aaaa,bbbbaaa,aaabbbaaa"))  # 匹配?號(hào)左側(cè)0個(gè)或1個(gè) 非貪婪匹配

          
        

<15> {n} 精準(zhǔn)匹配左邊n個(gè)前面的表達(dá)式

          
            print(re.findall("[0-9]{11}","18612239999,18612239998,136133333323")) # 指定查找的元素個(gè)數(shù) 

          
        

<16> {n,m} 匹配n到m次前面的正則表達(dá)式定義的片段

          
            print(re.findall("a{3,8}","alex,aaaabbbaaaaabbbbbbaaa,aaaaaaaaabb,ccccddddaaaaaaaa")) 

          
        

<17> a|b 匹配a或b

          
            print(re.findall("a|b","alexdsb"))

          
        

<18> () 匹配括號(hào)內(nèi)的表達(dá)式,也表示一組

          
            print(re.findall("
            
              (.+)
            
            ","
            
              alex
            
            
              wusir
            
            "))     #分組  
print(re.findall("
            
              (.+?)
            
            ","
            
              alex
            
            
              wusir
            
            "))   #控制貪婪匹配 

          
        

<19> . 匹配任意字符,除了換行符 當(dāng)定義re.DOTALL時(shí),可以匹配換行符

          
            print(re.findall("a.c","abc,aec,a\nc,a,c"))           # 匹配任意一個(gè)字符串(\n除外) 

          
        
          
            print(re.findall("a.c","abc,aec,a\nc,a,c",re.DOTALL))

          
        

<20> ?. 就沒有任意功能了

          
            print(re.findall("-\d+\.\d+|-[0-9]|\d+",s))

          
        

<21> \s 匹配空格

          
            print(re.findall("\s","alex\tdsbrimocjb"))            # \s 匹配空格

          
        

<22> \S 匹配非空格

          
            print(re.findall("\S","alex\tdsbrimocjb"))            # \s 匹配非空格

          
        

試題:

          
            有如下字符串:'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb' 的 alex wusir '找到所有帶_sb的內(nèi)容

          
        

答案:

          
            s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb'print(re.findall("(.+?)_sb",s))

          
        

-------------------------------------------------------------------常用方法----------------------------------------------------------------

(1)findall 全部找到返回的是一個(gè)列表

          
            print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))

          
        

(2) search 從字符串中任意位置進(jìn)行匹配查找到一個(gè)就停止了,返回的是一個(gè)對(duì)象. 獲取匹配的內(nèi)容必須使用.group()進(jìn)行獲取

          
            print(re.search("a.+","lexaaaa,bssssaaaasa,saaasaasa").group())

          
        

(3)match 從字符串開始位置進(jìn)行匹配

          
            print(re.match("a.+","alexalexaaa,bssssaaaasa,saaasaasa").group())

          
        

試題

search 和 match 的區(qū)別

search 從任意位置開始查找

match 從頭開始查找,如果不符合就不繼續(xù)查找了

都用group()進(jìn)行查看

(4)split -- 分割 必須要有[ ]

          
            print(re.split("[:;,.!#]","alex:dsb#wusir.djb"))

          
        

(5)sub -- 替換

          
            s = "alex:dsb#wusir.djb"
print(re.sub("d","e",s,count=1))

          
        

(6)complie -- 定義匹配規(guī)則

          
            s = re.compile("\w")
print(s.findall("alex:dsb#wusir.djb"))

          
        

(7)finditer -- 返回一個(gè)迭代器

          
            s = re.finditer("\w","alex:dsb#wusir.djb")   # 返回的就是一個(gè)迭代器
print(next(s).group())
print(next(s).group())
for i in s:
    print(i.group())

          
        

(8)search -- 給分組命名 ?P

          
            ret = re.search("<(?P
            
              \w+)>\w+","
              

hello

") ret = re.search("<(?P \w+)>(?P \w+)","

hello

") print(ret.group("tag_name")) print(ret.group("content"))

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論