web服务器--正则表达式 re.match

怎么看用户输入的内容是我所需要的规范,比如用户注册----正则表达式
在python中需要正则表达式对字符串进行匹配时,可以使用一个模块,re
在这里插入图片描述
在这里插入图片描述
检测需要处理的字符串是不是符合我的正则表达式,如果有返回值说明满足,并且会形成一个新的对象。那如果不满足呢?
在这里插入图片描述
不满足时没有返回值,那么我怎么样能让 h和H都能符合规范,怎么办?

在这里插入图片描述
在这里插入图片描述
h和H都满足我的正则表达式。
代替一个数字: \d
在这里插入图片描述
如果把返回值赋值给一个变量,怎么提取出来?—group
在这里插入图片描述
注意:一个\d等价于一位数字。
在这里插入图片描述
\d 其实等价于0-9,但是如果我们想加个范围呢?用中括号
在这里插入图片描述
也可以写成[1-8]
在这里插入图片描述
如果是123678呢?
在这里插入图片描述
中括号中不止可以写数字,还可以写字母
在这里插入图片描述
也可以加入大写字母
在这里插入图片描述
总结一下:
在这里插入图片描述
上面都是单个字符,如果我要匹配多个字符,比如两位的数字12怎么办?两个\d\d?我们来实现一下:
在这里插入图片描述
两个是可以识别两位数,但是他不能识别一位数了。那应该怎么办,加一个{},表示前面的字符的位数。
在这里插入图片描述
如果想要识别三位数呢?
在这里插入图片描述
如果需要识别固定的位数,比如11位的电话号码?
在这里插入图片描述
\d{11} 表示必须是连续的11位数字。

但是有的电话号码比如座机,会有-。但是时有时没有,怎么识别呢?加个问号。
在这里插入图片描述
完善一下:
在这里插入图片描述
. 可以匹配字符,*代表任意个,那么 两个加一起,应该是表示任意个字符。
在这里插入图片描述
可以看出,.*表示的是任意个字符,但是不包括换行。
总结:
在这里插入图片描述
在这里插入图片描述
练习:判断列表中的变量名是否符合要求:
变量名:包括数字字母和下划线,且不能以数字开头。

import re

def main():
    names = ['age', 'age1', 'a1ge', '_age1', '_1g_e', 'age!', 'a#1ge', '___1_']
    for name in names:
        ret = re.match(r'[a-zA-Z_][a-zA-Z0-9_]*', name)
        if ret:
             print('字符串 %s 符合要求。正则表达式匹配的结果是: %s' % (name, ret.group()))
        else:
             print('字符串 %s 不符合要求。' %name)

if __name__ == '__main__':
    main()

在这里插入图片描述
可以看出效果并不好,那么倒数第二个和第三个为什么不对呢?很明显是没有检验到最后一位。加一个$

import re

def main():
    names = ['age', 'age1', 'a1ge', '_age1', '_1g_e', 'age!', 'a#1ge', '___1_']
    for name in names:
        ret = re.match(r'[a-zA-Z_][a-zA-Z0-9_]*$', name)
        if ret:
             print('字符串 %s 符合要求。正则表达式匹配的结果是: %s' % (name, ret.group()))
        else:
             print('字符串 %s 不符合要求。' %name)

if __name__ == '__main__':
    main()

在这里插入图片描述
练习:匹配出163的邮箱地址,并且@符号之前有4-20位数字字母和下划线。例如hello@163.com

import re

def main():
    while True:
        email = input('请输入一个163邮箱地址:')
        ret =re.match(r'[a-zA-Z0-9_]{4,20}@163\.com$', email)
        if ret:
            print('%s 符合要求----' % email)
        else:
            print('%s 不符合要求---' % email)


if __name__ == '__main__':
    main()

在这里插入图片描述
如果既想识别163邮箱,也想识别126邮箱
在这里插入图片描述
加了括号之后,就可以选择性的取值了。
在这里插入图片描述
这里要注意,从1开始取。

思考一个问题,如果我要识别
n/20190529102514860.png)
有相同的部分,那么可以怎么表示?

在这里插入图片描述
但是如果小括号的分组很多,用123编码容易乱,那么可以起个名字吗啊?
在这里插入图片描述
这里的P要大写。

总结:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值