python Regex

來源:互聯網
上載者:User

標籤:效率   依賴   預設   match   解析   pre   一個   none   property   

Regex應用情境
  • 特定規律字串的尋找替換切割等

  • 郵箱格式、url等格式的驗證

  • 爬蟲項目,提取特定的有效內容

  • 很多應用的設定檔

使用原則
  • 只要能夠通過字串等相關函數能夠解決的,就不要使用正則

  • 正則的執行效率比較低,會降低代碼的可讀性

  • 世界上最難讀懂的三樣東西:醫生的處方、道士的神符、碼農的正則

  • 提醒:正則是用來寫的,不是用來讀的,不要試著閱讀別人的正則;不懂功能時必要讀正則。

基本使用
  • 說明:正則是通過re模組提供支援的

  • 相關函數:

    • match:從開頭進行匹配,找到就立即返回正則結果對象,沒有就返回None

    • search:匹配全部內容,任意位置,只要找到,立即返回正則結果對象,沒有返回None

      # python依賴次模組完成正則功能
      import re
      ?
      # 從開頭進行匹配,找到一個立即返回正則結果對象,沒有返回None
      m = re.match(‘abc‘, ‘abchelloabc‘)
      # 匹配全部內容,任意位置,只要找到,立即返回正則結果對象,沒有返回None
      m = re.search(‘abc‘, ‘helloabcshsjsldj‘)
      if m:
         print(‘ok‘)
         # 擷取匹配內容
         print(m.group())
         # 擷取匹配位置
         print(m.span())
    • findall:匹配所有內容,返回匹配結果組成的列表,沒有返回None


      # 匹配所有內容,返回匹配結果組成的列表,沒有返回None
      f = re.findall(‘abc‘, ‘abcsdisuoiabcsjdklsjabc‘)
      if f:
         print(f)
    • compile:根據字串產生Regex的對象,用於特定正則匹配,通過match、search、findall匹配


      # 根據字串產生Regex的對象,用於正則匹配
      c = re.compile(‘abc‘)
      # 然後進行特定正則匹配
      # m = c.match(‘abcdefghijklmn‘)
      m = c.search(‘abcdefghijklmn‘)
      if m:
         print(m)
      ?
      print(c.findall(‘abcueywiabcsjdkaabc‘))

      將re模組中的match、search、findall方法的處理過程分為了兩步完成。

正則規則
  • 單個字元


    一般字元:就是一對一的完全符合
    []:中間的任意一個字元
    [a-z]:表示a到z的任一字元
    [0-9]:表示0到9的任一字元
    [^abc]:除abc之外的字元
    . :匹配‘\n‘以外的任一字元
    \d:所有的數字字元,等價於[0-9]
    \D:所有的非數字字元,等價於[^0-9]
    \w:所有的數字、字母、中文、底線等 (就是字的意思)
    \W:\w之外的所有字元
    \s:所有的空白字元,如:空格、\t、\n、\r
    \S:\s之外的所有字元
    \b:詞邊界,如:開頭、結尾、標點、空格等
    \B:非詞邊界
  • 次數控制


    *:前面的字元可以是任意次
    +:前面的字元至少出現一次
    ?:至多一次,0次或1次
    {m}:匹配固定的m次
    {m,}:至少m次
    {m,n}:m到n次

    正則的匹配預設是貪婪的

  • 邊界限定

    • ^:以指定內容開頭

    • $:以指定內容結尾


    import re
    ?
    # 以指定內容開頭
    # c = re.compile(r‘^abc‘)
    # 以指定內容結尾
    # c = re.compile(r‘abc$‘)
    # 同時限制開頭和結尾
    c = re.compile(r‘^abc$‘)
    ?
    s = c.search(‘abc‘)
    ?
    if s:
       print(‘ok‘)
       print(s.group())
  • 分組匹配

    • |:表示或,具有最低的優先順序

    • ():用於表示一個整體,可以確定優先順序


    import re
    ?
    # | 表示或,具有最低的優先順序
    # () 用於表示一個整體,可以確定優先順序
    c = re.compile(r‘a(hello|world)d‘)
    ?
    s = c.search(‘aworldd‘)
    ?
    if s:
       print(‘ok‘)
       print(s.group())

    ()還有分組匹配的作用,下次再講。

練習:
  • 若匹配有特殊正則含義的字元怎麼辦,如:\d

    • 友情提示:轉義問題(python中轉義一次、正則解析轉義一次)

  • 驗證一個字串是否是正確的郵箱格式

  • 驗證一個字串是否是正確的url格式

思路
  • 以功能為導向

  • 寫出符合規則的若干字串

  • 寫一點測一點,不斷的調整

  • 最終完成功能

python Regex

聯繫我們

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