1.引入正則模塊(Regular Expression)
要使用python3中的RE則必須引入 re模塊
import re #引入正則表達(dá)式
2.主要使用的方法 match(), 從左到右進(jìn)行匹配
#pattern 為要校驗的規(guī)則
#str 為要進(jìn)行校驗的字符串
result = re.match(pattern, str)
#如果result不為None,則group方法則對result進(jìn)行數(shù)據(jù)提取
3. 正則表達(dá)式
1??單字符匹配規(guī)則
字符 功能
. 匹配任意1個字符(除了\n)
[] 匹配[]中列舉的字符
\d 匹配數(shù)字,也就是0-9
\D 匹配非數(shù)字,也就是匹配不是數(shù)字的字符
\s 匹配空白符,也就是 空格\tab
\S 匹配非空白符,\s取反
\w 陪陪單詞字符, a-z, A-Z, 0-9, _
\W 匹配非單詞字符, \w取反
2??表示數(shù)量的規(guī)則
字符 功能
* 匹配前一個字符出現(xiàn)0次多次或者無限次,可有可無,可多可少
+ 匹配前一個字符出現(xiàn)1次多次或則無限次,直到出現(xiàn)一次
? 匹配前一個字符出現(xiàn)1次或者0次,要么有1次,要么沒有
{m} 匹配前一個字符出現(xiàn)m次
{m,} 匹配前一個字符至少出現(xiàn)m次
{m,n} 匹配前一個字符出現(xiàn)m到n次
例一: 驗證手機(jī)號碼是否符合規(guī)則(不考慮邊界問題)
#首先清楚手機(jī)號的規(guī)則
#1.都是數(shù)字 2.長度為11 3.第一位是1 4.第二位是35678中的一位
pattern = "1[35678]\d{9}"
phoneStr = "18230092223"
result = re.match(pattern, phoneStr)
result.group()
#執(zhí)行結(jié)果如下圖:
4. 原始字符串raw, 先來看如下實例:
在上圖中: 在給str賦值"\nabc"前加上"r"之后,python解釋器會自動給str的值"\nabc"在加上一個"\".
使str在被打印的時候,能夠保持原始字符串的值"\nabc"打印出來.
例二: (原始字符串在正則表達(dá)式中的應(yīng)用)
假若沒有原始自付出r,則我們就要進(jìn)行如下的操作: 給pattern加上雙倍的"\"以避免轉(zhuǎn)義字符中減少"\".會比較麻煩
當(dāng)我們使用r原始字符串時,就不必考慮字符串的轉(zhuǎn)移問題,更易集中解決字符匹配問題.
5. 表示邊界
字符 功能
^ 匹配字符串開頭
$ 匹配字符串結(jié)尾
\b 匹配一個單詞的邊界
\B 匹配非單詞邊界
例三: 邊界(制定規(guī)則來匹配str="ho ve r")
import re
#定義規(guī)則匹配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. 匹配分組
字符 功能
| 匹配左右任意一個表達(dá)式
(ab) 將括號中字符作為一個分組
\num 引用分組num匹配到的字符串
(?P
) 分組起別名
(?P=name) 引用別名為name分組匹配到的字符串
例四: 匹配出0-100之間的數(shù)字
import re
#匹配出0-100之間的數(shù)字
#首先:正則是從左往又開始匹配
#經(jīng)過分析: 可以將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}$"
#測試數(shù)據(jù)為0,3,27,100,123
result = re.match(pattern, "27")
result.group()
#將0考慮到1-99上,上述pattern還可以簡寫為:pattern=r"100$|[1-9]?\d{0,1}$"
#測試結(jié)果如下圖:
例五: 匹配分組,獲取頁面中的
標(biāo)簽中的內(nèi)容
import re
#匹配分組,獲取頁面
標(biāo)簽中的內(nèi)容, 爬蟲的時候會用到
str = "
hello world!
"
pattern = r"
(.*)
"
result = re.match(pattern, str)
result.group()
#執(zhí)行如下圖
例六: 分組引用, 精確獲取多個標(biāo)簽內(nèi)的內(nèi)容
import re
#引用分組,精確獲取多個標(biāo)簽內(nèi)的內(nèi)容
#"\1"是對第一個分組的引用,同理......
str = "
hello world!
"
pattern = r"<(.+)><(.+)>.*"
result = re.match(pattern, str)
result.groups()
#執(zhí)行如下圖:
例七-2:分組起別名
import re
#分組起別名
str = "
hello world!
"
pattern = "<(?P
.+)><(?P
.+)>(?P
.*)"
result = re.match(pattern, str)
result.groups()
#執(zhí)行如下圖:
以上這篇對python3中的RE(正則表達(dá)式)-詳細(xì)總結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

