Python基礎知識3:reRegex,pythonRegex

來源:互聯網
上載者:User

Python基礎知識3:reRegex,pythonRegex

   

 Regex(或RE)是一種小型的、高度專業化的程式設計語言,內嵌在Python中,僅做字元的匹配。

1、字元類型:

一般字元和元字元;

1)一般字元:大多數的字元和字母都會和自身匹配,比如:

                t2=re.findall('ahh','yahhkkkgggtngslahh')  # 匹配結果['ahh', 'ahh']

2)元字元: . ^  $ * + ? {} [] |  ()   /

  • .匹配除分行符號之外的任一字元

  • ^表示匹配字串的開始,比如^hello'匹配'helloworld'而不匹配'aaaahellobbb

  • $表示匹配字串末尾,可參考^

  • []用來匹配一個指定的字元集。

  • | 或的含義。匹配|左右運算式任意一個,從左至右匹配,如果|沒有包括在()中,則它的範圍是整個Regex 

    *重複零次或更多次

  • +重複一次或更多次

  • ?重複零次或一次

  • {n}重複n次,{n,}重複n次或更多次,{n,m}重複n到m次

  • \逸出字元,後跟元字元,則表示去除特殊功能,\後跟一般字元實現特殊功能,引用序號對應的字組所匹配的字串,主要有:   

      • \A    只在字串開始進行匹配    

      • \Z    只在字串結尾進行匹配    

      • \b    匹配位於開始或結尾的Null 字元串    

      • \B    匹配不位於開始或結尾的Null 字元串    

      • \d    相當於[0-9]    

      • \D    相當於[^0-9]    

      • \s    匹配任意空白字元:[\t\n\r\r\v]    

      • \S    匹配任意非空白字元:[^\t\n\r\r\v]    

      • \w    匹配任一數字和字母:[a-zA-Z0-9]    

      • \W    匹配任意非數字和字母:[^a-zA-Z0-9]

案例使用:

案例1:.匹配除分行符號之外的任一字元,一個.代表一個字元,多個.代表多個字元

案例2:^必須以字串開始

案例3:$匹配字串的結束,必須以字串結束

案例4:*匹配*前一個字元0次或無限次,比如abc*,可以是ab、abc、abcc、abcccc..等

案例5:+匹配+前一個字元1次或無限次

案例6:?匹配前一個字元0次或1次

案例7:{m}匹配前一個字元m次

案例8:{m,n}匹配前一個字元m-n次,如果m省略,則指重複0-n次,如果n省略,則指重複m-無限次

案例9:[...]字元集的字元以及轉意

    字元集可以逐個列出,也可以給出範圍如[abc]或[a-c],第一個字元如果是^,則表示取反,如[^abc]表示不是abc的其他字元。所有特殊的字元在字元集中都失去其原有的特殊含義,在字元集中,如果要使用]、-或^,可以在前面加上反斜線,或把]、-放在第一個字元,把^放在非第一個字元r

其他的轉意字元:

  • \d 匹配任何十進位數:它相當於類[0-9]。

  • \D 匹配任何非數字字元:它相當於類[^0-9]

  • \s 匹配任何空白字元:它相當於類[\t\n\r\f\v]

  • \S 匹配任何非空白字元:它相當於類[^\t\n\r\f\v]

  • \w匹配任何字母數字字元,它相當於類[a-zA-Z0-9]

  • \W匹配非任何字母或數字字元,即[^\w]

  • \b 匹配一個單詞邊界,也就是指單詞和空格間的位置,匹配\w和\W之間,比如一些特殊的字元標點,空格等。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

  • B [^\b]

案例10:\b想要匹配一個單詞I,而不是單詞中包含的I


2、主要函數:

  • match(正則模型, 要匹配的字串, flags=0),從起始位置開始匹配,匹配成功,則返回一個對象,未匹配成功返回None,和search區別是是否從第一個位置開始。需要配合

  • search(正則模型, 要匹配的字串, flags=0,瀏覽整個字串去匹配,直到找到一個匹配,未匹配成功返回None

  • findall(正則模型, 要匹配的字串, flags=0) 瀏覽全部字串,匹配所有合規則的字串,匹配到的字串放到一個列表中,未匹配成功返回空列表。匹配成功的字串,不在參與下次匹配

  • split(正則模型, 要匹配的字串, 指定分隔個數, flags=0) 根據正則匹配分割字串,返回分割後的一個列表

  • sub(正則模型, 要替換的字串, 要匹配的字串, 指定匹配個數, flags=0),替換匹配成功的指定位置字串。

  • subn(正則模型, 要替換的字串, 要匹配的字串, 指定匹配個數, flags=0),替換匹配成功的指定位置字串,並且返回替換次數,可以用兩個變數分別接收。

  • re.compile(pattern[, flags]):把Regex文法轉化成Regex對象。flags定義包括:
    re.I:忽略大小寫
    re.L:表示特殊字元集 \w, \W, \b, \B, \s, \S 依賴於當前環境
    re.M:多行模式
    re.S:’ . ’並且包括分行符號在內的任一字元(注意:’ . ’不包括分行符號)
    re.U: 表示特殊字元集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字元屬性資料庫

group,分組是去已經擷取的東西裡面再去匹配

  • group() 擷取匹配到的所有結果,不管有沒有分組將匹配到的全部拿出來,有參取匹配到的第幾個如2

  • groups()  擷取模型中匹配到的分組結果,只拿出匹配到的字串中分組部分的結果

  • groupdict() 擷取模型中匹配到的分組結果,只拿出匹配到的字串中分組部分定義了key的組結果


案例11:match和group效果

案例12,groups的效果,一旦運算式有()就是分組

案例13,groupdict的效果

案例14,findall+分組

案例15,split+分組

案例16:替換sub


圖片來源網址:https://www.jianshu.com/p/df2e26c5b2b5


程式連結:https://pan.baidu.com/s/1nuDdaGh 密碼:dvzj

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.