[Python]第六課筆記–Regex

來源:互聯網
上載者:User

培訓第六課 re的使用
    re使用流程:模式串->運算式對象->匹配目標文本
    常用元字元:

        . :除分行符號以外的任何字元
        \ :逸出字元 當我們把元字元當做一般字元去匹配的時候
        [] :字元集合匹配
        \d :數字匹配 0-9
        \D :非數位匹配[^0-9]
        \s :非空白字元[ \t\r\n\f\n]
        \S :f非空白字元[^\s]
        \w :字母數字[A-Za-z0-9]
        \W :非字母數字[^\w]
        #說白了,大寫和小寫正好是補集的關係
        #使用compile會快一點
>>> p = re.compile(r'nihao')
>>> type(p)
<type '_sre.SRE_Pattern'>
        #匹配字元前面加r,少一些不必要的麻煩

In [10]: rs = p.match('abc abcde abcdd')
#使用mathch方法,匹配成功返回一個mactch對象,沒有成功就返回None
In [11]: print rs
<_sre.SRE_Match object at 0x03638918>
In [12]: rs.group()  #mathc只返回一個匹配到的字元
Out[12]: 'abc'
        
        數量匹配:

        + :一次或者多次 
        ?:一次或者0次 
        * :任意次數,0次,1次,多次
        {m} :匹配前一個字元m次
        {m,n}: 匹配前一個字元m到n次
        
        數量詞?:非貪婪模式 ex:[i]*?    
In [14]: p = re.compile('[abc]{2,3}') #預設是貪婪模式,總是匹配到最大限度
In [15]: p.findall('abcabcbc')
Out[15]: ['abc', 'abc', 'bc']
In [16]: p = re.compile('[abc]{2,3}?') #加了?以後變成非貪婪,最小匹配就返回
In [17]: p.findall('abcabcbc')
Out[17]: ['ab', 'ca', 'bc', 'bc']
        
        邊界:

        ^ :匹配字串的開頭,多行就匹配每一行的開頭
        $ :匹配字串的結尾,多行就匹配每一行的結尾
        \A :僅匹配字串的開頭
        \Z :僅匹配字串的末尾
        \b :匹配 \w \W之間

        邏輯分組:

        | :或操作
        (..) :分組匹配,匹配傳回值
        (?...):分組匹配,不返回匹配值
        \<num> :引用到編號為num的分組匹配到的串 
        (?P<name>):分組命名
        (?p=name): 引用分組,不提取值 
        #分組操作和group字樣的方法關係密切
#不分組不提取
In [52]: re.findall(r'(?:a)b','abc')
Out[52]: ['ab']
#分組命名
In [54]: m = re.match(r'(?P<a>a)(b)','abc')
In [55]: m.groups()
Out[55]: ('a', 'b')
In [56]: m.groupdict()
Out[56]: {'a': 'a'}
        
        特殊構造:

        (?:..) :不分組 
        (?iLmsux) :不同模式
        (?#...) :#注釋
        (?=...) :之後滿足才返回字元
        (?!...) :
        (?<=...) :
        (?<!...) :
        (?(id/name)yes|no) :
In [69]: re.findall(r'a(?=\d)','a3 a4')
Out[69]: ['a', 'a']

        匹配模式:

        re.I 忽略大小寫 
        re.M 多行模式改變為^ $的行為,忽略換行 
        re.S .任意匹配模式,包括換行
        re.U 使用\w\W\b\B\s\S\d\D取決於UNIcode字元屬性
        re.X 詳細模式 
        re.L 使用預訂字串類\w\W\b\B\s\S取決於目前範圍設定
        (?iLmsux) :不同模式 一般放在運算式的開頭,其他位置也行
        
        常用函數:

            compile
            pattern
            match
            serach
            split
            findall
            finditer
            sub
            ?match和search的區別      

         
        

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.