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]
\d(digit) \w(word) \s(space) \t(table) \n(next)
[0-9] \d 表示全部的數字
\w 表示 大小寫字母、數字、下劃線
\s 表示空白、空格、換行符、製表符
\t 匹配製表符
\n 匹配換行符
\D \W \S
\D 表示全部的非數字
\W 表示除數字、字母、下劃線以外的全部字符
\S 表示非空白
[\d\D] [\W\w] [\S\s] 匹配全部一切字符
. 表示除了換行符以外的任意內容
. 在.前加一個 轉義符。表示取消.的意義。
[] [^]
[] 字符組 :只要在中括號內的全部字符都是符合規則的字符
[^ ]非字符組 :只要在中括號內的全部字符都是不符合規則的字符
^ $
^ 表示一個字符的開始
^a abc abc abc # 表示要匹配開始的a
$ 表示一個字符的結束
c$ abc abc abc # 表示要匹配結束的c
^ $ 兩個同時存在時,他倆之間的正則規定長度必須和要匹配的內容長度一致。
| ()
| 表示或,注意:若是兩個規則有重疊部分,老是長的在前面,短的在後面
() 表示分組,給一部分正則規定爲一組,| 這個符號的做用域就能夠縮小了
{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+)?
正則表達式默認貪婪匹配,老是會在符合量詞條件的範圍內儘可能多匹配。
正則表達式遵循了回溯算法,回溯算法致使了貪婪匹配。
\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])?