正则表达式
1.1 匹配、切割、替换字符串
import re
#从开头位置查找,只查找一次
result=re.match('\d\d\d\d', '1994hs4jkk')
print(result.group())
#从头至尾查找,只查找一个值,返回
ret=re.search(r'\d+','阅读次数为9999')
print(ret.group())
#匹配出所有的数字字符串(从头至尾查,查找到所有的值,然后以列表的形式返回)
ret=re.findall('\d+','python=9999 c=7890,c++=12345')
print(ret)
#切割字符串
ret=re.split(':1','info:xiaozhang 123 shandong')
print(ret)
#替换字符串
re.sub()
1.2 匹配单个字符串
import re
ret = re.match(".","a")
print(ret.group())
ret = re.match("[hH]","hello PytHon")
print(ret.group())
ret = re.match("[0-9]","7Hello Python")
print(ret.group())
ret = re.match("嫦娥\d号","嫦娥1号发射成功")
print(ret.group())
1.3 匹配多个字符串
# 匹配多个字符串
import re
ret = re.match("[A-Z][a-z]*","Mmnp")
print(ret.group())
匹配变量名是否有效
ret = re.match("[a-zA-Z_]+[\w_]*","name1_")
print(ret.group())
匹配出,0到99之间的数字
ret = re.match("[1-9]?[0-9]","77321")print(ret.group())
ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678")
print(ret.group())
#匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
ret1 = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
print(ret1.group())
1.4 匹配开头结尾
import re
ret = re.match(r"[\w]{4,20}@163\.com", "xiaoWang@163.com")
print(ret.group())
以^确定开头
ret = re.match("^[\w]{4,20}@163\.com", "xiaoWang@163.comheihei")
print(ret.group())
通过$来确定末尾
ret = re.match("[\w]{4,20}@163\.com$", "xiaoWang@163.comheihei")
print(ret.group())
# 编程引导:re模块、match方法
# 匹配手机号
# 匹配出163的邮箱地址,且@符号之前有4到20位
import re
res=re.match('[\d]*', '17835417896')
print(res.group())
ress=re.match('[0-9]*@qq\.com$','16054444@qq.com')
print(ress.group())
ret = re.match("[1-9]?[0-9][0-9]","57")
print(ret.group())
import re
ret = re.match("200|100|300","300")
print(ret.group())
匹配出163、126、qq邮箱
import re
ret = re.match("\w{4,20}@163\.com", "test@163.com")
print(ret.group())
ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@126.com")
print(ret.group())
案例1:
思路分析:
# 1、邮箱@前6-16位字符的163邮箱。
# 2、手机号11位,第一位是1,第二位是3,5,7,8。
# 3、用户名不少于4位字符。
# 4、昵称不少于2个字符。
# 5、密码是6位数字。
import re
mail=input('请输入邮箱:')
if re.match(r'\d{6,16}@163.com',mail):
iphone=input('请输入手机号')
if re.match('1[3,5,7,8][\d]{9}$',iphone):
username=input('请输入用户名:')
if re.match('[a-zA-Z0-9]{4,}',username):
name=input('请输入昵称:')
if re.match('[a-zA-Z0-9]{2,8}',name):
password = input('请输入密码:')
if re.match('[a-zA-Z0-9]{6}',password):
print('注册成功')
else:
print('请重新输入密码')
else:
print('请输入2-8位的昵称')
else:
print('输入大于4位的用户名')
else:
print('输入11位手机号')
else:
print('6-16位字符的163邮箱')
案例2:
使用正则和异常完成会员注册所涉及的以下操作
(1)提醒用户从键盘输入一个手机号吗
(2)首先判断手机号码是否为11位,如果是就是进入下一步,如果不是,请输出长度不正确
(3)接着用正则判断,手机号码是否是以13/15/17/18/19开头的数字,是则输出:手机号符合规范,否则请输出:请你留下正确的手机号
(4)提醒用户从键盘输入一个自己的邮箱
(5)要求邮箱账号长度为6-10位,匹配的邮箱名字由数字、字母、下划线组成
(6)邮箱为qq或163或126,要求:(5)和(6)均利用正则解决
(7)如果符合要求,则输出邮箱,如果不符合则输出:邮箱不合要求,要求用异常实现
(8)邮箱的输入只给用户3次机会,机会用完仍然不合要求,则提示:用户注册失败。
import re
number=input('请输入一个手机号:')
count=0
if len(number)==11:
if re.match(r'(13|15|17|18|19)[\d]{9}',number):
while True:
count+=1
box=input('请输入一个邮箱')
seq=r'[\d\w_]{6,10}@(qq|163|126)\.com'
try:
c = re.match(seq, box)
if c:
print(f'邮箱为:{box}')
break
else:
if count>=3:
print('用户注册失败')
break
raise BaseException
except BaseException:
print('邮箱不合要求')
else:
print('请你留下正确的手机号 ')
else:
print('手机号码长度不正确')