import re
# 正则表达式中的元字符:
# “.” 点通配符表示可以替换表达式中的任意字符,只能代指一个字符,除换行符外
print(re.findall("a..", "hdhgaqwe"))
# “^”只从开始匹配
print(re.findall("^a..", "ahdhgaqwe"))
# “$” 只从结尾匹配
print(re.findall("a..$", "ahdhgawe"))
# “*” 重复匹配【0-无穷】
print(re.findall("a*bc", "ahdhgaabcqwbce"))
# “+” 重复匹配【1-无穷】
print(re.findall("a+bc", "ahdhgaabcqwbce"))
# “?”匹配0个或一个字符
print(re.findall("a?b", "ahdhgaabcqwbce"))
# “{}” 表示重复多少次字符
print(re.findall("a{2}b", "ahdhgaabcqwbce"))
print(re.findall("a{1,3}b", "ahdhgaaabcqwbce"))
# “[]” 字符集,表示满足字符集中任意一个字符都可以,不可以满足多个字符,还可以取消元字符的特殊意义但这些不取消(| ^ -),^放在字符集中是取反的意思
print(re.findall("[a-z,0-9]b", "ahdhgaabcqw12ebc1be"))
# “\” 反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能
# '\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
# '\Z' 匹配字符结尾,同$
# '\d' 匹配数字0-9
# '\D' 匹配非数字
# '\w' 匹配[A-Za-z0-9]
# '\W' 匹配非[A-Za-z0-9]
# 's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
print(re.findall("b\*", "ahdhgaab*cqwbce"))
print(re.findall("b\d", "ahdhgaab*cqwb12ce"))
# “()” 分组,匹配一组数据,把括号里面的内容当一组使用
print(re.search("(ab)+", "ahdhgababcqwabbce").group())
# findall优先取组中的内容:['baidu']
print(re.findall("www.(\w+).com", "www.baidu.com"))
# ?:可以取消优先组的内容展示全部内容
print(re.findall("www.(?:\w+).com", "www.baidu.com"))
# “|”管道符,或的意思,匹配前一组或后一组
print(re.search("Ab| ab", "Abahdhgabcqwbbce").group())
# ?P<name> 名称的固定格式,可以根据名称取具体值
ret = re.search("(?P<name>[a-z]{3})(?P<age>[0-9]{2})", "1a2aabc123")
print(ret.group())
print(ret.group("name"))
print(ret.group("age"))
# 正则表达式中常用的方法
# findall 全匹配,只要字符串中匹配出来的都在列表中展示
print(re.findall("a..b", "ashbshhaccbd"))
# finditer 把匹配出来的数据做成迭代器,可以通过next取取值
ret = re.finditer("\d", "abcgg6782j8")
print(next(ret).group())
# search匹配出一个后保存到对象中,可以通过group调用获取具体值
print(re.search("a..b", "ashbshhaccbd").group())
# match中从开始位置匹配字符串,也保存为对象,可以通过group调用获取具体值
print(re.match("a..b", "ashbshhaccbd").group())
# split以匹配到的字符进行分组
print(re.split("[h,c]", "ashbshaccbd"))
# sub把匹配到的字符进行替换
print(re.sub("h.", "vvvv", "ashbshaccbd"))
print(re.sub("h.", "vvvv", "ashbshaccbd", 1))
# 会告诉替换了的次数
print(re.subn("h.", "vvvv", "ashbshaccbd"))
# compile把正则条件编译成对象,后续可以直接调用
mat = re.compile("a..")
print(mat.findall("ashbshaccbd"))