正则表达式的边界表示

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

字符 描述
^ 匹配字符串开头
$ 匹配字符串结尾
\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$","[email protected]")
print(rs)
rs = re.match("\w{3,10}@163.com$","[email protected]")
print(rs)
rs = re.match("\w{3,10}@163.com$","[email protected]")
print(rs)
rs = re.match("\w{3,10}@163.com$","[email protected]")
print(rs)

运行结果:

<_sre.SRE_Match object; span=(0, 17), match=‘[email protected]’>
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之外的任意字符

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

扫描二维码关注公众号,回复: 12794511 查看本文章
rs = re.match("\w{3,10}@163\.com$","[email protected]")
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=‘[email protected]’>
匹配结果2:None

猜你喜欢

转载自blog.csdn.net/lildn/article/details/114528751
今日推荐