接下來學習正規表示式的邊界表示,邊界表示就是在寫正規表示式的時候,限制匹配的字串的開始和結束邊界。
字元 描述
^ 匹配字串開頭
$ 匹配字串結尾
\b 匹配乙個單詞的邊界
\b 匹配非單詞邊界
注意:邊界字元只用於描述邊界資訊,不能用於字元的匹配。
示例:完善之前課時中關於手機號碼匹配的示例,在匹配超過11位的手機號,或者11位的手機號後邊還有其他字元的情況,正規表示式也能夠匹配成功,這種情況是不允許的。這種情況就需要限制手機號的結尾。
#使用$限制匹配的字串以11位數字組成,結尾不能新增其他字元
rs = re.match(
"1[3578]\d$"
,"13612345678"
)print
(rs.group())
#匹配正確的手機號
#手機號末尾新增字串將匹配失敗
rs = re.match(
"1[3578]\d$"
,"13612345678abc"
)#匹配失敗
print
(type
(rs)
)#空型別
執行結果:
13612345678
(使用match方法進行正則匹配「^」匹配開頭不是很明顯,因為match本身就是從左向右順序匹配的)
示例:郵箱匹配
#郵箱位址以3到10個單詞字元開始,以@163.com結束
rs = re.match(
)print
(rs)
rs = re.match(
)print
(rs)
rs = re.match(
)print
(rs)
rs = re.match(
)print
(rs)
執行結果:
<_sre.sre_match object; span=(0, 17), match=『[email protected]』>
none
none
none
問題1:隨意用乙個字母代替郵箱中的「.」也會匹配成功
rs = re.match(
,"hello_123@163hcom"
)print
("匹配結果:%s"
%rs)
執行結果:
匹配結果:<_sre.sre_match object; span=(0, 17), match=『hello_123@163hcom』>
原因是:在正規表示式中「.」有特殊的含義,表示除\n之外的任意字元
解決辦法:使用轉義字元\ 標識「.」是普通字元「.」
rs = re.match(
"\w@163\.com$"
)print
("匹配結果1:%s"
%rs)
rs = re.match(
"\w@163\.com$"
,"hello_123@163hcom"
)print
("匹配結果2:%s"
%rs)
執行結果:
匹配結果1:<_sre.sre_match object; span=(0, 17), match=『[email protected]』>
匹配結果2:none
正規表示式之字元邊界
非零寬字元 能夠匹配字元的 特殊 字元。如 d會匹配乙個數字,s會匹配空白字元 零寬字元 不匹配字元,只標記位置 具體含義見下文 表示式表示含義 與字串開始的地方匹配 與字串結束的地方匹配 b匹配乙個單詞邊界 上例表示 匹配以 a 作為字串開始的位置 上例表示 匹配以 l 作為字串結尾的位置 初學者...
C 正規表示式 單詞邊界
using system using system.collections.generic using system.linq using system.text using system.text.regularexpressions using system.threading.tasks na...
正規表示式常用表示
很多不太懂正則的朋友,在遇到需要用正則校驗資料時,往往是在網上去找很久,結果找來的還是不很符合要求。所以我最近把開發中常用的一些正規表示式整理了一下,包括校驗數字 字元 一些特殊的需求等等。給自己留個底,也給朋友們做個參考。一 校驗數字的表示式 數字 0 9 n位的數字 d 至少n位的數字 d m ...