import re
# 元字符:. ^ $ * + ? { } [ ] | ( )
# 通配符 . 只能代指任意一个字符,除了换行符
# ^ 只以开始来匹配
# $ 只以结尾来匹配
# * 重复匹配[0,正无穷]
# + 重复匹配[1,正无穷]
# ? 取0次或1次
# ret = re.findall('abc*?','abcccc')
# print(ret) # ['ab'] , *+贪婪匹配后面加? ,使其成为惰性匹配
# {} 自定义范围贪婪匹配 {1,3} , {1,}:代表正无穷
# * 等价于 {0,正无穷}
# + 等价于 {1,正无穷}
# ? 等价于 {0,1}
# [] 1、字符集 [c,d] c 与 d 是或的关系,取其一进行匹配
# 2、[a-z] 匹配a到z的字母范围
# 3、取消元字符的特殊功能(^-这三个符号例外), [w,*] * 在这里面代表普通字符
# 4、[^i]: ^放在[]里是取反,取不是i 的内容,[^4,5]:4和5是一组,取不是4、不是5 的内容
# 1、反斜杠后面跟元字符,去除特殊功能
# 2、反斜杠后面跟普通字符,实现特殊功能(
# d 匹配任何十进制数;它相当于类 [0-9]。
# D 匹配任何非数字字符;它相当于类 [^0-9]。
# s 匹配任何空白字符;它相当于类 [
fv]。
# S 匹配任何非空白字符;它相当于类 [^
fv]。
# w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
# W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
# 匹配一个特殊字符边界,比如空格 ,&,#等。 r'I' 匹配I
# )
# () 分组
# set = re.findall('www.(w+).com','www.baidu.com')
# print(set) #['baidu']
# set = re.findall('www.(?:w+).com','www.baidu.com')
# print(set) # ['www.baidu.com'] ?: 取消分组优先级
# | 或的意思
# 正则表达式的方法:
# 1、 findall() 所有结果都返回到一个列表里
# 2、 search() 匹配成功后返回第一个对象,无匹配成功会报错,对象可以通过group()方法返回结果
# 3、 match() 只在字符串开始匹配,返回匹配到的第一个对象,通过group()方法返回结果
# 4、split() 字符分割
# ret = re.split('k','abdksjl')
# print(ret) # ['abd', 'sjl']
# ret = re.split('[j,s]','sdjksal')
# print(ret) # ['', 'd', 'k', 'al'] 先分割j,然后再分割s
# 5、sub() 替换
# ret = re.sub('a','1','abca',1) # 最后面的1 表示只替换1次
# print(ret) # 1bc1
# ret = re.subn('d{4}$','****','410184108053')
# print(ret) # ('41018410****', 1) subn 后面多了一个替换的次数
# 6、compile() 编译规则,通过方法调用,方便多次调用
# obj = re.compile('.com')
# ret = obj.findall('abc.com')
# print(ret) # ['.com']
#
# ret1 = obj.search('abc.com').group()
# print(ret1) # .com
#
# ret2 = obj.split('abc.com')
# print(ret2) # ['abc', '']
#
# ret2 = obj.sub('.net','abc.com')
# print(ret2) # abc.net
# obj = re.compile('d{4}$')
#
# xkzh = obj.subn('****','410184108053')
#
# print(xkzh)
# ret = re.findall('ww{2}l','hello world')
# print(ret) # ['worl']
# ret = re.findall('w..l','hello world')
# print(ret) # ['worl']
#
# ret = re.findall('^h...o','hheeeodokjdhowhello')
# print(ret) # [] ^ 只以开始来匹配,后面的不再匹配
# ret = re.findall('a..x$','alexaoixaiuooiu')
# print(ret) # [] $ 只以结尾来匹配
# ret = re.findall('a*','kjibaaaaaaa')
# print(ret) # ['', '', '', '', 'aaaaaaa', '']
# ret = re.findall('ba+','kjibaaaaaaa')
# print(ret) # ['aaaaaaa'] 匹配加号前面所有的字符
# ret = re.findall('b+a','kjibadfbafs')
# print(ret) # ['ba', 'ba']
# ret = re.findall('b?a','kjibadfbfdafs')
# print(ret) # ['ba', 'a']
# ret = re.findall('a{2}b','aaab')
# print(ret) # ['aab']
# ret = re.findall('a{1,3}b','aaaacab')
# print(ret) # ['ab']
# ret = re.findall('a[c,d,e,]x','adx')
# print(ret) # ['adx']
# ret = re.findall('a[b,c]d','a,d')
# print(ret) # ['a,d'] 逗号也代表一个字符
# ret = re.findall('a[bc]d','abcd')
# print(ret) # [] , b或c
# ret = re.findall('[a-z]','adx')
# print(ret) # ['a', 'd', 'x']
# ret = re.findall('[w,*]','awbsd*d')
# print(ret) # ['w', '*']
# ret = re.findall('[^i]','siuJO2')
# print(ret) # ['s', 'u', 'J', 'O', '2']
# ret = re.findall('d{2}','sdjio2303829fjiejowijef')
# print(ret) # ['23', '03', '82']
# ret = re.findall('D','sd230jf')
# print(ret) # ['s', 'd', 'j', 'f']
# ret = re.findall('s','dfs dfwdsad dsdd')
# print(ret) # [' ', ' ']
# ret = re.findall('S','dfs d dd')
# print(ret) # ['d', 'f', 's', 'd', 'd', 'd']
# ret = re.findall('w','d23fs d dd')
# print(ret) # ['d', '2', '3', 'f', 's', 'd', 'd', 'd']
#
# ret = re.findall('W','d23
fs d dd')
# print(ret) # ['
', ' ', ' ', ' ']
# ret = re.findall(r'I','Hello,I am a LI&ST')
# print(ret) # ['I', 'I']
# ret = re.findall(r'I','Hello Iam a LI&ST')
# print(ret) # ['I']
# ret = re.search('sb','fdjsksblkjiohsb') # search 匹配出第一个满足条件的结果
# print(ret) # <_sre.SRE_Match object; span=(5, 7), match='sb'>
# print(ret.group()) # sb
# print(re.search('sb','fdjsksblkjiohsb').group()) # sb ,效果同上
# print(re.search('a.','a.ghj').group()) # 匹配不到时,group 会报错, 结果为:a.
# print(re.search('\\g','aghj').group()) # 匹配反斜杠 g
# print(re.search(r'\g','aghj').group()) # 匹配反斜杠 g
# ret = re.findall('(as)+','fjiaslijaskj')
# print(ret) #['as', 'as']
# ret = re.findall('(as)+','fjiaslijaskj')
# print(ret) #['as', 'as']
#
# print(re.search('(as)+','fjiaslijaskj').group()) # as
# print(re.search('(as)|3','as3').group()) # as, 取as 或 3
# ret = re.search('(?P<id>d{3})/(?P<name>w{3})','weeew34ttt123/ooo')
# print(ret.group()) # 123/ooo
# print(ret.group('id')) # 123
# print(ret.group('name')) # ooo
# ret = re.match('asd','asdasdfdjiasd').group()
# print(ret) # asd
# print('abcdddfes'.split('d')) # ['abc', '', '', 'fes']