正则表达式的边界表示

接下来学习正则表达式的边界表示,边界表示就是在写正则表达式的时候,限制匹配的字符串的开始和结束边界。

字符 描述
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词边界
注意:边界字符只用于描述边界信息,不能用于字符的匹配。

示例:完善之前课时中关于手机号码匹配的示例,在匹配超过11位的手机号,或者11位的手机号后边还有其他字符的情况,正则表达式也能够匹配成功,这种情况是不允许的。这种情况就需要限制手机号的结尾。

#使用$限制匹配的字符串以11位数字组成,结尾不能添加其他字符
rs = re.match("1[3578]\d{9}$","13612345678") 
print(rs.group()) #匹配正确的手机号
#手机号末尾添加字符串将匹配失败
rs = re.match("1[3578]\d{9}$","13612345678abc")#匹配失败
print(type(rs)) #空类型

运行结果:

13612345678
<class ‘NoneType’>
(使用match方法进行正则匹配“^”匹配开头不是很明显,因为match本身就是从左向右顺序匹配的)

示例:邮箱匹配

#邮箱地址以3到10个单词字符开始,以@163.com结束
rs = re.match("\w{3,10}@163.com$","hello_123@163.com")
print(rs)
rs = re.match("\w{3,10}@163.com$","he@163.com")
print(rs)
rs = re.match("\w{3,10}@163.com$","hello_12345645@163.com")
print(rs)
rs = re.match("\w{3,10}@163.com$","hello_123@163.comhaha")
print(rs)

运行结果:

<_sre.SRE_Match object; span=(0, 17), match=‘hello_123@163.com’>
None
None
None
问题1:随意用一个字母代替邮箱中的“.”也会匹配成功

rs = re.match("\w{3,10}@163.com$","hello_123@163hcom")
print("匹配结果:%s"%rs)

运行结果:

匹配结果:<_sre.SRE_Match object; span=(0, 17), match=‘hello_123@163hcom’>
原因是:在正则表达式中“.”有特殊的含义,表示除\n之外的任意字符

解决办法:使用转义字符\ 标识“.”是普通字符“.”

rs = re.match("\w{3,10}@163\.com$","hello_123@163.com")
print("匹配结果1:%s"%rs)
rs = re.match("\w{3,10}@163\.com$","hello_123@163hcom")
print("匹配结果2:%s"%rs)

运行结果:

匹配结果1:<_sre.SRE_Match object; span=(0, 17), match=‘hello_123@163.com’>
匹配结果2:None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值