正規表示式複習

2021-10-23 05:12:22 字數 4044 閱讀 7978

為了下列場景中的需求,可以使用正規表示式非常簡單的完成,這就是使用正規表示式的目的

在乙個檔案中,查詢出itcast開頭的語句

在乙個檔案中,找到含有itcast的語句

在乙個檔案中,找到郵箱為163或者126的所有郵件位址

通常正規表示式對字串匹配的時候,可以使用re模組

import re

# 使用match方法進行匹配操作

result = re.match(正規表示式, 要匹配的字串)

# 如果上一步匹配到資料, 可以使用group方法提取資料

result.group(

)例如:

result = re.match(

'itcast'

,'itcast.cn'

)ret = result.group(

)print

(ret)

# itcast

字元

功能.(點)

匹配任意1個字元(除了\n)

[ ]匹配[ ]中列舉的字元

\d匹配數字,即0-9

\d匹配非數字,即不是數字

\s匹配空空,即空格、tab鍵

\s匹配非空白

\w匹配單詞字元,即a-z、a-z、0-9、_

\w匹配非單詞字元

字元功能

*匹配前乙個字元出現0次或者無限次,即可有可無

+匹配前乙個字元出現1次或者無限次,即至少有一次

?匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有

匹配前乙個字元出現m次

匹配前乙個字元出現從m到n次

字元功能

^匹配字串開頭

$匹配字串結尾

匹配163.com的郵箱位址

import re

email_list =

["[email protected]"

,"[email protected]"

,"[email protected]"

]for email in email_list:

ret = re.match(

"[\w]@163\.com$"

, email)

if ret:

print

("%s 是符合規定的郵件位址,匹配後的結果是:%s"

%(email, ret.group())

)else

:print

("%s 不符合要求"

% email)

**正規表示式使用反斜槓" \ "來代表特殊形式或用作轉義字元

字元功能

|匹配左右任意乙個表示式

(ab)

將括號中字元作為乙個分組

\num

引用分組num匹配到的字串

(?p)

分組起別名

(?p=name)

引用別名為name分組匹配到的字串

匹配0-100之間的數字

import re

ret = re.match(

"[1-9]?\d"

,"8"

)print

(ret.group())

# 8ret = re.match(

"[1-9]?\d"

,"78"

)print

(ret.group())

# 78

# 不正確的情況

ret = re.match(

"[1-9]?\d"

,"08"

)print

(ret.group())

# 0# 修正之後的

ret = re.match(

"[1-9]?\d$"

,"08"

)if ret:

print

(ret.group())

else

:print

("不在0-100之間"

)# 新增|

ret = re.match(

"[1-9]?\d$|100"

,"8"

)print

(ret.group())

# 8ret = re.match(

"[1-9]?\d$|100"

,"78"

)print

(ret.group())

# 78

ret = re.match(

"[1-9]?\d$|100"

,"08"

)# print(ret.group()) # 不是0-100之間

ret = re.match(

"[1-9]?\d$|100"

,"100"

)print

(ret.group())

# 100

匹配出163、126、qq郵箱
import re

email_list =

["[email protected]"

,"[email protected]"

,"[email protected]"

,"[email protected]"

]for email in email_list:

ret = re.match(

"[\w]@(163|126|qq)\.com$"

, email)

if ret:

print

("%s 是符合規定的郵件位址,匹配後的結果是:%s"

%(email, ret.group())

)else

:print

("%s 不符合要求"

% email)

不是以4、7結尾的手機號碼(11位)
import re

tels =

["13100001234"

,"18912344321"

,"10086"

,"18800007777"

]for tel in tels:

ret = re.match(

"1\d[0-35-68-9]"

, tel)

if ret:

print

(ret.group())

else

:print

("%s 不是想要的手機號"

% tel)

提取區號和**號碼
>>

> ret = re.match(

"([^-]*)-(\d+)"

,"010-12345678"

)>>

> ret.group(

)'010-12345678'

>>

> ret.group(1)

'010'

>>

> ret.group(2)

'12345678'

貪婪:總是匹配盡可能多的字元

非貪婪:相反,總是嘗試匹配盡可能少的字元

在 「*」, 「?」, 「+」, 「」 後面加上?,使貪婪變成非貪婪

>>

> re.match(r"aa(\d+)"

,"aa2343ddd"

).group(1)

'2343'

>>

> re.match(r"aa(\d+?)"

,"aa2343ddd"

).group(1)

'2'>>

> re.match(r"aa(\d+)ddd"

,"aa2343ddd"

).group(1)

'2343'

>>

> re.match(r"aa(\d+?)ddd"

,"aa2343ddd"

).group(1)

'2343'

>>

>

python中字串簽名加上 r 表示原生字串

r 的好處

有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。

正規表示式複習

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置...

正規表示式複習

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp物件的multiline屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果...

複習整理正規表示式

正規表示式 就是乙個規則,用來匹配字串 建立方法 字面量方法 let reg 常用 new方法 let reg new regexp 不常用 轉義字元 匹配輸入字行首 一般判斷字串是否符合 後面的字段 匹配輸入行尾 判斷是否以其字段結尾 正則元字元 w 匹配數字 字母 下劃線 w 匹配非數字 字母 ...