import re
#search
s = "<a>wahaha</a>" #标签语言 html 和 web相关
ret= re.search("(>)(w+)(<)",s)
print(ret.group()) #>wahaha< 和print(ret.group(0))结果一样
print(ret.group(1)) #> 数字参数代表取对应分组中的内容
print(ret.group(2)) #wahaha
print(ret.group(3)) #<
# search分组 通过数字显示
# findall
# 为了findall可以顺利取到分组中的内容,有一种特殊的语法,就是优先显示分组内容
ret= re.findall(">w+<",s)
print(ret) #['>wahaha<']
ret= re.findall(">(w+)<",s) #加括号会优先显示(w+)的内容,两边的> < 就不显示了
print(ret) #['wahaha']
# 取消分组优先(?: 正则表达式)
ret= re.findall("d+(.d+)?", "1.234.5.678")
print(ret) #['.234', '.678'] python把正则中的括号当成了优先分组,所以取出来的是小数点之后的,
# 因为正则规则用了()规定小数,所以函数会当成优先级执行
ret2= re.findall("d+(?:.d+)?", "1.234.5.678") #在括号中加上?: 可以取消优先级
print(ret2) #['1.234', '5.678']
#split
#没有分组的时候会把切掉的内容不显示,加上分组会一起显示出来
ret = re.split("d+","alex29egon30")
print(ret) #['alex', 'egon', '']
ret = re.split("(d+)","alex29egon30")
print(ret) #['alex', '29', 'egon', '30', '']
#分组命名 (?P<这个组的名字>正则表达式)
s = '<a>wahaha</a>'
ret = re.search('>(?P<name>w+)<',s)#把想取出来的wahaha单独括起来了,并且加了 ?P 和一个名字 (name)
print(ret.group()) #>wahaha<
print(ret.group(1)) #wahaha 因为就一个分组,所以直接取wahaha
print(ret.group('name')) #wahaha 也可以通过组名取值
s = '<a>wahaha</a>'
pattern = '<(w+)>(w+)</(w+)>'
ret = re.search(pattern,s)
print(ret.group(1) == ret.group(3)) # True 判断前后两个标签名 a a 字是否一致
s = '<a>wahaha</A>'
pattern = '<(w+)>(w+)</(w+)>'
ret = re.search(pattern,s)
print(ret.group(1) == ret.group(3)) # False 判断前后两个标签名 a A 字是否一致
# 使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
s = '<a>wahaha</A>'
pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>'
ret = re.search(pattern,s)
print(ret) #None 前后分组的名字不一致, 返回None
s = '<a>wahaha</a>'
pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
ret = re.search(pattern,s)
print(ret.group(2))
s = '<a>wahaha</a>'
pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha')]
s = '<a>wahaha</a>'
pattern = r'<(w+)>(w+)</(1)>' #1 直接表示了第一个()里的内容, 这个没有tab,没有组名,直接用数字表达了,但是需要在字符串前加上一个r, 对1转义
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha', 'a')]
# 这些情况会用到
# 2018-12-06
# 2018.12.6
# 2018 12 06
# 12:30:30