python3中的RE(正則表達式)


記錄大佬的 整理 

原文來自:https://blog.csdn.net/weixin_40136018/article/details/81183504

 

1.引入正則模塊(Regular Expression)

 要使用python3中的RE則必須引入 re模塊

 import re #引入正則表達式

2.主要使用的方法 match(), 從左到右進行匹配

 

#pattern 為要校驗的規則
#str 為要進行校驗的字符串
result = re.match(pattern, str)

#如果result不為None,則group方法則對result進行數據提取
result.group()
3. 正則表達式

 1️⃣單字符匹配規則

 

字符          功能
.             匹配任意1個字符(除了\n)
[]            匹配[]中列舉的字符
\d           匹配數字,也就是0-9
\D          匹配非數字,也就是匹配不是數字的字符
\s           匹配空白符,也就是 空格\tab
\S           匹配非空白符,\s取反
\w           匹配單詞字符, a-z, A-Z, 0-9, _
\W          匹配非單詞字符, \w取反
2️⃣表示數量的規則

 

字符                         功能
*               匹配前一個字符出現0次多次或者無限次,可有可無,可多可少
+              匹配前一個字符出現1次多次或則無限次,直到出現一次
?              匹配前一個字符出現1次或者0次,要么有1次,要么沒有
{m}           匹配前一個字符出現m次
{m,}          匹配前一個字符至少出現m次
{m,n}        匹配前一個字符出現m到n次
 例一: 驗證手機號碼是否符合規則(不考慮邊界問題)

 #首先清楚手機號的規則

#1.都是數字 2.長度為11 3.第一位是1 4.第二位是35678中的一位

pattern = "1[35678]\d{9}"
phoneStr = "18230092223"

result = re.match(pattern, phoneStr)
result.group()

#執行結果如下圖:

 

 

 4. 原始字符串raw, 先來看如下實例:

 

 

 在上圖中: 在給str賦值"\nabc"前加上"r"之后,python解釋器會自動給str的值"\nabc"在加上一個"\".

    使str在被打印的時候,能夠保持原始字符串的值"\nabc"打印出來.

    例二: (原始字符串在正則表達式中的應用)

 

 

假若沒有原始自付出r,則我們就要進行如下的操作:  給pattern加上雙倍的"\"以避免轉義字符中減少"\".會比較麻煩

當我們使用r原始字符串時,就不必考慮字符串的轉移問題,更易集中解決字符匹配問題.

 

 

5. 表示邊界

字符             功能
^            匹配字符串開頭
$            匹配字符串結尾
\b           匹配一個單詞的邊界
\B          匹配非單詞邊界
例三: 邊界(制定規則來匹配str="ho ve r")

import re

#定義規則匹配str="ho ve r"
#1. 以字母開始
#2. 中間有空字符
#3. ve兩邊分別限定匹配單詞邊界

pattern = r"^\w+\s\bve\b\sr"
str = "ho ve r"
result = re.match(pattern, str)
result.group()
6. 匹配分組

字符                      功能
|                     匹配左右任意一個表達式
(ab)               將括號中字符作為一個分組
\num              引用分組num匹配到的字符串
(?P<name>)     分組起別名
(?P=name)      引用別名為name分組匹配到的字符串
例四: 匹配出0-100之間的數字

import re

#匹配出0-100之間的數字
#首先:正則是從左往又開始匹配
#經過分析: 可以將0-100分為三部分
#1. 0 "0$"
#2. 100 "100$"
#3. 1-99 "[1-9]\d{0,1}$"
#所以整合如下

pattern = r"0$|100$|[1-9]\d{0,1}$"
#測試數據為0,3,27,100,123
result = re.match(pattern, "27")
result.group()

#將0考慮到1-99上,上述pattern還可以簡寫為:pattern=r"100$|[1-9]?\d{0,1}$"
#測試結果如下圖:

 

  例五: 匹配分組,獲取頁面中的<h1>標簽中的內容

import re
#匹配分組,獲取頁面<h1>標簽中的內容, 爬蟲的時候會用到

str = "<h1>hello world!<h1>"
pattern = r"<h1>(.*)</h1>"
result = re.match(pattern, str)
result.group()

#執行如下圖

 

 

例六: 分組引用, 精確獲取多個標簽內的內容

import re

#引用分組,精確獲取多個標簽內的內容
#"\1"是對第一個分組的引用,同理......

str = "<span><h1>hello world!</h1></span>"
pattern = r"<(.+)><(.+)>.*</\2></\1>"
result = re.match(pattern, str)
result.groups()

#執行如下圖:

 

 

例六-2:分組起別名

import re

#分組起別名

str = "<span><h1>hello world!</h1></span>"
pattern = "<(?P<key1>.+)><(?P<key2>.+)>(?P<nr>.*)</(?P=key2)></(?P=key1)>"
result = re.match(pattern, str)
result.groups()

#執行如下圖:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM