1. 程式人生 > >正則和re模塊

正則和re模塊

多次 換行 git 相關 輸入 整數 下劃線 空白 復雜

正則表達式是什麽?能做什麽?

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模塊