import re # 正则 字符匹配(普通字符,元字符)
# 普通字符:大多数字符和子母
# 元字符: .^ $ * ?+{}[]|()\
# a = re.findall("a..x","dsfaffassxdfq") # 模糊匹配
# print(a) # ['assx']
# a = re.findall("^a..x","assxfassxdfq") # 开头有就拿没就是空
# print(a) # ['assx']
# a = re.findall("^a..x$","assxfassxdfq") # 结尾有就拿没就是空
# print(a) # []
# a = re.findall("d*","sdfdddsdf") # *(0,+00)每个字符串进行一次匹配
# print(a) # ['', 'd', '', 'ddd', '', 'd', '', '']
# a = re.findall("d+","sdfdddsdf") # +(1,+00)每个字符串进行一次匹配
# print(a) # ['d', 'ddd', 'd']
# a = re.findall("alex?","sdfdddalexxxx") # ?(0,1)
# print(a) # ['alex']
# {} {0,}==* {1,}==+ {0,1}==?
# 贪婪匹配(匹配最多值) * + ?等是贪婪匹配 后面加? 变成惰性匹配(匹配组少值)
# a = re.findall("alex*?","sdfdddalexxxx")
# print(a) # ['ale']
# a = re.findall("q[0-9]*","dsfsfq124das")
# print(a) # ['q124']
# a = re.findall("\([^()]*\)","12+(34*5+25*(2-1))")
# print(a) # ['(2-1)']
# 转化符 \ 后面跟元字符去除特殊功能比如\*
# \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 匹配一个特殊字符边界,比如空格,&,#等
# a=re.findall("\d","12+(34*5+25*(2-1))")
# print(a) # ['1', '2', '3', '4', '5', '2', '5', '2', '1']
# a=re.findall("\d+","12+(34*5+25*(2-1))")
# print(a) # ['12', '34', '5', '25', '2', '1']
# a=re.findall("\D+","12+(34*5+25*(2-1))")
# print(a) # ['+(', '*', '+', '*(', '-', '))']
# a = re.findall("I","hello I am leI")
# print(a) # ['I', 'I']
# a = re.findall(r"I\b","hello I am leIe") # r 取消转化
# print(a) # ['I']
# a = re.findall("I\\b","hello I am leIe") # \ 取消了\ 转化作用\\b就相当于Python识别\b
# print(a) # ['I']
# a = re.findall(r"I\b","hello I am leI")
# print(a) # ['I', 'I']
# a = re.findall(r"ka|b","sdfkasfd")
# print(a) # ['ka']
# a = re.findall(r"ka|b","sdfkbsfd")
# print(a) # ['b']
# a = re.findall(r"ka|b","sdfkabsfd")
# print(a) # ['ka', 'b']
# a = re.findall(r"ka|b","sdfka|bsfd")
# print(a) # ['ka', 'b']
# a = re.findall("(abc)+","abcabcabc")
# print(a) # ['abc']
# a = re.findall(r"(abc)+","abcabcabc")
# print(a) # ['abc']
# search 匹配成功取出对象地址不成功不输出 可用group()取出值
# a = re.search("(?P<name>[a-z]+)\d+","alex35lei22xir26").group()
# print(a) # alex35
# a = re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex35lei22xir26").group("age")
# print(a) # 35
# a = re.match("\d+","12alex35lei22xir26").group()
# print(a) # 12
# a = re.split(" ","hello abc def")
# print(a) # ['hello', 'abc', 'def']
# a = re.split("[ |]","hello abc|def")
# print(a) # ['hello', 'abc', 'def']
# a = re.split("[ab]","abc")
# print(a) # ['', '', 'c']
# a = re.sub("\d+","A","jaskdasf123kj4j12j4")
# print(a) # jaskdasfAkjAjAjA
# a = re.sub("\d","A","jaskdasf123kj4j12j4")
# print(a) # jaskdasfAAAkjAjAAjA
# a = re.subn("\d","A","jaskdasf123kj4j12j4")
# print(a) # ('jaskdasfAAAkjAjAAjA', 7)
# com = re.compile("\d+")
# print(com.findall("sd123se234e34ed")) # ['123', '234', '34']
# ret = re.finditer("\d","daw123dw13eew13wer32hjk")
# print(next(ret).group()) # 1
# print(next(ret).group()) # 2
# print(next(ret).group()) # 3
# a = re.findall("www\.(?:baidu|163)\.com","dadwww.163.comasd")
# print(a) # ['www.163.com']