python 正則表達式

正則表達式

1. 正則表達式

re模塊:re模塊自己只是用來操做正則表達式的,和正則自己不要緊。python

正則表達式:是一種規則 匹配字符串的規則。git

爲何要有正則表達式?正則表達式

  • 1.匹配字符串算法

    - 一我的的電話號碼
    - 一我的的身份證號
    - 一臺機器的ip地址
  • 2.表單驗證spa

    - 驗證用戶輸入的信息是否準確
          11位 全數字 1開頭 第二個數3-9以內的數
    - 銀行卡號
  • 3.爬蟲
    從網頁源碼中獲取一些連接、重要數據code

正則規則(元字符,量詞):ip

第一條規則 : 自己是哪個字符,就匹配字符串中的哪個字符。ci

第二條規則 : 字符組[字符1字符2],一個字符組就表明匹配一個字符,只要這個字符出如今字符組裏,那麼就說明這個字作用域

​ 符能匹配上字符串

  • 字符組中還可使用範圍

    全部的範圍都必須遵循ascii碼從下到大來指定。如:[0-9] [a-z] [A-Z]

2. 元字符

    1. \d(digit) \w(word) \s(space) \t(table) \n(next)

      [0-9] \d 表示全部的數字

      • d --> d
      • \d --> \是轉義符,轉義符轉義了d,讓d可以匹配全部0-9之間的數
      • [\d] [0-9] \d 沒有區別 都是要匹配一位數字

      \w 表示 大小寫字母、數字、下劃線

      \s 表示空白、空格、換行符、製表符

      \t 匹配製表符

      \n 匹配換行符

    2. \D \W \S

      \D 表示全部的非數字

      \W 表示除數字、字母、下劃線以外的全部字符

      \S 表示非空白

      [\d\D] [\W\w] [\S\s] 匹配全部一切字符

    3. . 表示除了換行符以外的任意內容

       . 在.前加一個 轉義符。表示取消.的意義。

    4. [] [^]

      [] 字符組 :只要在中括號內的全部字符都是符合規則的字符

      [^ ]非字符組 :只要在中括號內的全部字符都是不符合規則的字符

    5. ^ $

      ^ 表示一個字符的開始

      ^a
      abc abc abc    # 表示要匹配開始的a

      $ 表示一個字符的結束

      c$
      abc abc abc    # 表示要匹配結束的c

      ^ $ 兩個同時存在時,他倆之間的正則規定長度必須和要匹配的內容長度一致。

    6. | ()

      | 表示或,注意:若是兩個規則有重疊部分,老是長的在前面,短的在後面

      () 表示分組,給一部分正則規定爲一組,| 這個符號的做用域就能夠縮小了

3. 量詞

{n} 表示只能出現n次

{n,m}表示至少出現n次,至多出現m次

? 表示匹配0次或1次 表示無關緊要 可是有隻能有一個 好比小數點

. 表示匹配1次或屢次

*表示匹配0次或屢次 表示無關緊要 可是有能夠有多個 好比小數點後n位

何時會用到匹配0次?

1.匹配任意的2位整數   \d{2}
2.匹配任意的保留兩位小數的數字   \d\.\d{2}
3.匹配一個整數或者小數  \d+\.\d+|\d+   \d+\.?\d*   \d+(\.\d+)?

4. 貪婪匹配

正則表達式默認貪婪匹配,老是會在符合量詞條件的範圍內儘可能多匹配。

正則表達式遵循了回溯算法,回溯算法致使了貪婪匹配。

\d{7,12}
adljdkjsljdlj
<.+>
非貪婪匹配 (惰性匹配):老是匹配符合條件範圍內儘可能小的字符串。

元字符 量詞 ,在量詞後面加一個?,表示去最少的匹配

元字符 量詞 ? x :表示按照元字符規則在量詞範圍內匹配,一旦遇到x就中止

.*?x 匹配任意的內容任意屢次遇到x就當即中止

(\d+?x .*?x )非貪婪匹配在爬蟲中會經常使用

# 身份證號
# 15位  全數字 首位不爲0
# 18位  前17位全數字 首位不爲0  最後一位多是x和數字
[1-9](\d{16}(\d|x)|\d{14})
[1-9](\d{16}[\dx]|\d{14})
[1-9]\d{14}(\d{2}[\dx])?
相關文章
相關標籤/搜索