import re
#1.re.search 扫描整个字符串并返回第一个匹配的字符
urls=['http://www.baidu0.com','https://www.sohu1.com','https://www.sogou.com','http://www.qq.com']
for i in urls:
#rule=re.match('https',i) # 查找以https开头的网址
rule=re.search('\d',i) #查找内容包含数字的网址
if rule:
print(i)
#2. {}表示个数
print(re.match(r"\d{3}", '123aab')) #匹配以三个数字开头的字符串
print(re.match(r'\d{3}\s+\d{2}','123aab'))#匹配含有多个空白的数字串
#3. []表示范围
print(re.match(r'[a-z0-9]','123aab')) #匹配任意一个小字母字或数字
print(re.match(r'[a-z0-9]','aab33'))
print(re.match(r'[a-z0-9]+','aab33')) #匹配任意多个小字母或数字
print(re.match(r'[a-z0-9]+','33aab'))
#4. *号代表任意个
print(re.findall(r'[a-z][0-9]*','aab2')) #匹配以小写字母开头后接任意个数字的字符串
# 结果:['a', 'a', 'b2'] *代表任意个,也包括0个, 前两个a后面都没有接数字,匹配出来是单个a,后面的b2匹配的是一个字母一个数字
print(re.search(r'[a-z][0-9]*','aab245')) #匹配以小写字母开头后面接任意个数字的字符串
#5.{}[]*自由结合
print(re.findall(r'[a-z][0-9]{1,3}','aab2')) #匹配以小字母开头,后接1-3个数字的字符串,只是匹配没有限制是开头
print(re.search(r'[a-z][0-9]{1,3}','aab2'))
#6.^ 表示以什么开头
print(re.search(r'^[a-z0-9A-z]+@qq.com$','123@qq.com'))
print(re.search(r'^[a-z0-9A-z]+@(qq|QQ|163|126).com$','123@QQ.com'))
#7.()括号表示取其中一个
print(re.search(r'^[a-z0-9A-z]+@(qq|QQ|163|126).com$','123@QQ.com')) #匹配字母或数字开头的 大小写qq,163,或126的邮箱
#8.用户输入用户名,判断用户名是否符合规则 :用户名长度为8,必须大写字母或下划线开头,不能含有*号
username=['M123','m1fkdf','Abcd1234','123cad','_dkfe*78']
for i in username:
pattern=r'^[A-Z_]\w{7}' #以大写字母或下划线开头,长度为8位,大写字母开头已经占了一位,后面还剩7位,\w表示任意字符 \w{7}表示任意7位字符
if re.match(pattern,i):
print(i)
else:
print('invalid username')