一、概念:利用一些特定的匹配规则从字符串或者文本中找需要的内容
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('三(.{2})',s)
print(res)
===>千尺
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('三.{2}',s)
print(res)
===>三千尺
二、re常用匹配方法
1、^ 从开头找
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('^疑是',s)
print(res)
==》None
+++++++
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('^飞流',s)
print(res)
==》['飞流']
2、$默认是结尾
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('飞流$',s)
print(res)
==》[]
+++++++++++++++++
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('天$',s)
print(res)
==》['天']
3、| 相当于or
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('飞流|疑是',s)
print(res)
===》['飞流', '疑是']
4、[a,b,c] 只要包含列表中的元素都找出来[a-zA-Z]
s="abdadkjwqbdkqbabdjaj"
res=re.findall('[a,b,c]',s)
print(res)
====>['a', 'b', 'a', 'b', 'b', 'a', 'b', 'a']
5、.{num} 匹配到num个字符
s="abdadkjwqbdkqbabdjaj"
res=re.findall('ad.{2}',s)
print(res)
====>['adkj']
6、* 匹配0个及0个以上
a="aabcbcbcbadaf"
res=re.findall('a*',a)
print(res)
===>['aa', '', '', '', '', '', '', '', 'a', '', 'a', '', '']
7、+ 匹配至少有一个af
s="afafefafef"
res=re.findall('af+',s)
print(res)
===>['af', 'af', 'af']
s="afffafefafef"
res=re.findall('af+',s)
print(res)
====>['afff', 'af', 'af']
8、? 匹配0个或者多个
['d', '', '', '', '', '', '', '', '']
9、\d 匹配数字
s="Awfagwega131fsf233gs"
res=re.findall('\d',s)
==>['1', '3', '1', '2', '3', '3']
10、\D 除了数字
s="Awfagwega131fs#$@f233gs"
res=re.findall('\D',s)
==>['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', 'f', 's', '#', '$', '@', 'f', 'g', 's']
11、\s 匹配空
s="Awfagwega 131fs#$@f2da 33gs"
res=re.findall('\s',s)
print(res)
==>[' ', ' ', ' ', ' ']
12、\S 匹配非空
s="Awfagwega 131fs#$@f2da 33gs"
res=re.findall('\S',s)
print(res)
==>['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', '1', '3', '1', 'f', 's', '#', '$', '@', 'f', '2', 'd', 'a', '3', '3', 'g', 's']
13、\w字母数字下划线 非空
s="Awfagwega 13__#(*@(1fs#$@f2da 33gs"
res=re.findall('\w',s)
print(res)
==》['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', '1', '3', '_', '_', '1', 'f', 's', 'f', '2', 'd', 'a', '3', '3', 'g', 's']
14、贪婪匹配 .*
s="Awfagwega 13__#(*@(1fs#$@f2da 33gs"
res=re.findall('.*',s)
print(res)
==>['Awfagwega 13__#(*@(1fs#$@f2da 33gs', '']
s="Awfagwega 13__#(*@(1fs#$@f2da 33gss"
res=re.findall('1.*s',s)
print(res)
==>['13__#(*@(1fs#$@f2da 33gss']
15、非贪婪 。*?
s="Awfagwega 13__#(*@(1fs#$@f2da 33gss"
res=re.findall('1.*?s',s)
print(res)
==>['13__#(*@(1fs']
三、re高级用法
1、compile
import re
s="fef@*Emfs#@#&*FUW!@34311#$@njn"
re_temp1=re.compile('\w+')
res=re_temp1.findall(s)
print(res)
2、match(从开头开始匹配,只取一个) | search(搜索一个,只取一个)
import re
s="abcdddaa"
res1=re.match('aa',s)
res2=re.search('aa',s)
print(res1.group())===>None
print(res2.group())===>aa
3、()分组(也就是取括号里面的内容)
import re
s="abcbabdbakjdhqhoifioaoqfq"
res=re.findall('ba(.*?)if',s)
print(res)
==>['bdbakjdhqho']
++++++++++
s="abcbabdbakjdhqhoifioaoqfq"
res=re.findall('ba(k.*?)if',s)
print(res)
====>['kjdhqho']
4、split:通过正则的匹配规则,按匹配到的内容进行切割
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.split(',',s)
print(res)
==>['飞流直下三千尺', '疑是银河落九天']
++++++++++++++++++++
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.split('\d',s)#可以写匹配规则进行切割
print(res)
====>['飞流直下三', '', '千尺,疑是', '', '银', '', '', '河落九天']
++++++++++++++++++++
s="飞流直下三1111千尺,疑是31银321河落九天"
res=re.split('\d+',s)
print(res)
==》['飞流直下三', '千尺,疑是', '银', '河落九天']
5、sub(匹配替换匹配的内容,并返回) | subs(匹配替换匹配的内容,并返回替换的数量)
import re
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.sub('\d',"",s)
print(res)
===>飞流直下三千尺,疑是银河落九天 <class 'str'>
import re
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.sub('\d',"",s)
print(res)
===>('飞流直下三千尺,疑是银河落九天', 7) <class 'tuple'>