正則和re模塊
正則表達式是什麽?能做什麽?
1,把一個文件中所有的手機號碼都找出來 從大段的文字中找到符合規則的內容
open打開文件
讀文件 str
從一長串的字符串中找到所有的11位數字
是一個字符一個字符的讀
2.輸入手機號 判斷某個字符串是否完全符合規則
驗證這個手機號是否合法
給這個手機號發送一個驗證碼
用戶收到驗證碼 填寫驗證碼
完成註冊
正則表達式
從大段的文字中找到符合規則的內容
爬蟲 從網頁的字符串中獲取到你想要的數據
日誌分析 提取所有的時間段的內容
判斷某個字符串是否完全符合規則
表單驗證:手機號 qq號 郵箱 銀行卡 身分證號 密碼
正則表達式 只和字符串打交道
正則表達式的規則
規則 字符串 從字符串中找到符合規則的內容
字符組 : [ ] 寫在中括號中的內容,都出現在下面的某一個字符的位置上都是符合規則的
[0-9] 匹配數字
[a-z] 匹配小寫字母
[A-Z] 匹配大寫字母
[8-9] 匹配8-9
[a-zA-Z] 匹配大小寫字母
[a-zA-Z0-9] 匹配大小寫字母和數字
[a-zA-Z0-9_] 匹配數字字母下劃線
元字符
\w 匹配數字字母下劃線 word關鍵字 相當於[a-zA-Z0-9_]
\d 匹配所有的數字 digit [0-9]
\s 匹配所有的空白符 回車/換行符 制表符 空格 space [\n\t]
匹配換行符 回車 \n
匹配制表符 tab \t
匹配空格
\W \D 和 \w \d \s 取反
[\s\S] [\d\D] [\w\W]是三組全集 意思是匹配所有的字符
\b 表示單詞的邊界
和轉義字母相關的元字符
\w \d \s(\n\t) \b \W \D \S
^ $
^ 匹配一個字符串的開始
$ 匹配一個字符串的結束
. 一個點表示匹配除換行符之外的所有的字符
[] 只要出現在中括號中的內容都可以被匹配
[^] 只要不出現在中括號的內容都可以被匹配
有一些有特殊意義的元字符進入字符組中會恢復它本來的意義: . | [] ()
a|b 或 符合a規則或者b規則的都可以被匹配
如果a規則是b規則的一部分,且a規則要苛刻/長,就把a規則寫在前邊
將更復雜的\更長的規則寫在最前邊
() 分組 表示給幾個字符加上量詞約束的需求的時候,就給這些量詞分在一個組
量詞
{n}表示 這個量詞之前的字符\出現n次
{n,} 表示這個量詞之前的字符至少出現n次
{n,m} 表示這個量詞之前的字符出現n-m次
? 表示匹配量詞之前的字符出現 0次 或者 一次 表示可有可無
+ 表示匹配量詞之前的字符出現 1次 或者 多次
* 表示匹配量詞之前的字符出現 0次 或者 多次
匹配整數 \d+
匹配小數 \d+\.\d+
匹配整數和小數 \d+(\.\d+)?
匹配負數和負小數 -?\d+(\.\d+)?
匹配省份證號碼: [1-9]\d{14}(\d{2}[\dX])?
正則表達式的匹配特點:貪婪匹配
它會在允許的範圍內去最長的結果
非貪婪模式/惰性匹配 : 在量詞後邊加上?
.*?X 匹配任意非換行符任意長度 直到遇到了X(停止條件)就停止
print(r‘\\n‘)
print(r‘\n‘)
關於字符串挪到python中的轉義問題:只需要在工具中測試完畢,確認可以匹配上後,挪到 python中在字符串的外邊加上r,r‘ ‘即可
re 模塊
使用re模塊之前必須引入re模塊
import re
查找
findall: 匹配所有 每一項都是列表中的每一個元素
search:只匹配從左到右的第一個,得到的不是直接結果,而是一個變量,通過這個變量的group方法來獲取結果
如果沒有匹配到會返回None,如果繼續使用group會報錯
match 從頭開始匹配,相當於search中的正則表達式加上一個^
在math的方法的正則表達式後邊加上$,結果就是None
字符串處理的擴展: 替換 切割
split
sub 替換 誰 舊的 新的 替換多少次
加替換次數的
subn 返回一個元組,第二個元素是替換次數
re模塊的進階 :
compile 節省使用正則表達式解決問題的時間
編譯正則表達式 編譯成字節碼
在多次使用過程中 不會多次進行編譯
finditer 節省使用正則表達式解決問題的空間/內存
正則和re模塊