為了下列場景中的需求,可以使用正規表示式非常簡單的完成,這就是使用正規表示式的目的
在乙個檔案中,查詢出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 =
]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 =
]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 匹配非數字 字母 ...