import re
# 元字符:. ^ $ * + ? { } [ ] | ( )
# 通配符 . 只能代指任意一个字符,除了换行符
# ^ 只以开始来匹配
# $ 只以结尾来匹配
# * 重复匹配[0,正无穷]
# + 重复匹配[1,正无穷]
# ? 取0次或1次
# {} 自定义范围贪婪匹配 {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 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
# \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
# \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
# \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
# \b 匹配一个特殊字符边界,比如空格 ,&,#等。 r‘I\b‘ 匹配I
# )
# () 分组
# | 或的意思
# ret = re.findall(‘w\w{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-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\nfs d\t dd‘)
# print(ret) # [‘\n‘, ‘ ‘, ‘\t‘, ‘ ‘]
# ret = re.findall(r‘I\b‘,‘Hello,I am a LI&ST‘)
# print(ret) # [‘I‘, ‘I‘]
# ret = re.findall(r‘\bI‘,‘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‘,‘a\ghj‘).group()) # 匹配反斜杠 \g
# print(re.search(r‘\\g‘,‘a\ghj‘).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