import re # 查找abc print(re.findall('abc', 'xxxxabcxxxabcxxxx')) #['abc', 'abc'] # 查找top或tip print(re.findall('t[io]p', 'top ttp ppt tip iip')) #['top', 'tip'] #前面有‘aa’ print(re.findall('^aa', 'aabbcc')) #['aa'] #后面有‘cc’ print(re.findall('cc$', 'aabbcc')) #['cc'] print(re.findall('[a-z]', 'a123B')) #['a'] print(re.findall('[A-Z]', 'a123B')) #['B'] # 编译正则表达式,运行速度更快 rl = r"\d{3}" p = re.compile(rl) # 编译 print(p.findall('12345')) #['123'] #替换 print(re.subn('a', 'A' , 'abc')) #('Abc', 1) # 拆分 print(re.split('[\+\-\*\/]',' 1+2-3*4/5')) #[' 1', '2', '3', '4', '5'] #re.M匹配多行,貌似不加第三个参数也可以呢? s = """ hehe xixi xixi hehe xixi haha """ print(re.findall('hehe', s, re.M)) #['hehe', 'hehe'] # 换行的正则表达式要加上re.X,否则无法匹配 re1 = r""" \d{3,4} -? \d{8} """ print(re.findall(re1, '010-12345678', re.X)) #['010-12345678'] # 正则表达式的分组,括号表示,findall会优先返回分组里面的数据 #备注:表达式有点问题 print(re.findall(r"\w{3}@\w+(\.com|\.cn)", 'abc@q.com')) # 利用分组优先获取想要的内容 # 表达式有待改进 s = r""" <a href="http://www.baidu.com/" >百度</a> <a href="http://www.google.com/" >谷歌</a> """ #没有使用分组,"href="也返回了 print(re.findall(r'href=".+', s, re.M)) #['href="http://www.baidu.com/" >百度</a>', 'href="http://www.google.com/" >谷歌</a>'] #使用了分组,"href="不返回了 print(re.findall(r'href="(.+)', s, re.M)) #['http://www.baidu.com/" >百度</a>', 'http://www.google.com/" >谷歌</a>']