一、正则表达式:一种小型的,高度专业化的编程语言
二、作用:用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法
三、正则表达式中的元字符:
1)" . ":匹配除了换行符以外的任意字符,当re.DOTAL被指定时,可以匹配包括换行符在内的所有字符
2)" ^ ":匹配字符串的开头
3)" $ ":匹配字符串的结尾
result1 = re.findall('m..u', 'I like miku') # miku result2 = re.findall('^miku', 'miku miku you can call me miku')#miku result3 = re.findall('miku$', 'miku miku you can call me miku')#mi
4)" * ":匹配0个或者任意个字符,属于贪婪匹配,默认最大匹配,在其前面加"?"可变为非贪婪匹配
5)" + ":匹配1个或者任意个字符,属于贪婪匹配,默认最大匹配,在其前面加"?"可变为非贪婪匹配
6 )" ? " :匹配0个或者1个字符
7)"{n,m}":匹配0个或者1个字符
result4 = re.findall('miku*', 'i like mikuuuu') # mikuuuu result4 = re.findall('miku*?', 'i like mikuuuu') # mik result5 = re.findall('miku*', 'i like mik') # mik result6 = re.findall('miku*', 'i like miku') # miku result7 = re.findall('miku+', 'i like mikuuuu') # mikuuuu result13 = re.findall('miku+?', 'i like mikuuuu') # miku result8 = re.findall('miku+', 'i like miku') # miku result9 = re.findall('miku+', 'i like mik') # 空 result10 = re.findall('miku?', 'i like mikuu') # miku result11 = re.findall('miku?', 'i like mikuu') # miku result12 = re.findall('miku?', 'i like mik') # mik result14=re.findall('miku{,2}','mikuuuuuu')#mikuu
8)" [] ":字符集,字符集内的各个字符为或关系,[ab]表示匹配a或者b
字符集内的元字符都将失去其原有的的意义,而“-”,“^”,“”将被赋予特殊意义
在字符集内" - "表示范围,如“0-9”表示从0到9的所有数字
“^”则表示非,反向匹配,如“^9”表示匹配除9以外的所有字符
“”转义字符
9)" ":转义字符:将有意义的字符变为普通字符或将部分无意义的字符变为有意义的字符
“”后跟元字符,元字符将失去意义变为普通字符,
“w”:匹配字母数字及下划线
“W”:匹配非字母数字及下划线
“s”:匹配任意空白字符
“S”:匹配任意非空白字符
“d”:匹配任意十进制数
“D”:匹配任意非十进制数字字符
“A”:匹配字符串开始
result15=re.findall('[miku]',"i like miku")#对字符集中的每个字符进行单独匹配 result15=re.findall('[0-9]',"i like miku1314520")#匹配所有数字 result15=re.findall('[^0-9]',"i like miku1314@dq")#匹配所有非数字 result15=re.findall('[d]',"i like miku1314@dq")#匹配所有数字 result15=re.findall('[D]',"i like miku1314@dq")#匹配所有非数字 result15=re.findall('[w]',"miku1314@dq_")#匹配数字,字母及下划线 result15=re.findall('[W]',"miku1314@dq_")#匹配非数字,字母及下划线 result15=re.findall('[s]',"miku1314 @dq_")#匹配空白字符 result15=re.findall('[S]',"miku1314 @dq_")#匹配非空白字符
在使用转义字符时。python解释器会优先解释,再将编译后的结果交给re在做转义,在语句前加“r”可以让python解释器将字符串按原来的样子
交给后续进程不作解释
result16=re.findall('\\',"imikulike") result16=re.findall(r'\\',"imikulike")#结果为空
9)" | ":匹配“|”前的字符或者匹配其后的字符
result16=re.findall('a|c',"abcd")#['a', 'c'] result16=re.findall('a|g',"abcd")#['a'] print(result16)
10)" ()":分组
result16=re.findall('(miku)+',"i like mikuuuu")#将miku视为一个整体做“+”结果为“miku”而不是”mikuuuu“ """分组的另一种是用方法是将匹配的结果通过一定格式赋值给指定变量,方便我们取匹配到的结果""" result=re.search('(?P<name>[a-z]+)d+',"520miku1314").group()#'miku1314' result=re.search('(?P<name>[a-z]+)d+',"520miku1314").group('name')#'miku' print(result)
11)re模块的内置方法
re.findall:列出所有的符合的匹配结果,以一个列表的形式返回
result=re.findall('miku','miku miku ni shi te a ge ru')#['miku', 'miku'] '''findall会优先显示分组中的匹配内容,在分组中的匹配规则前加?:可取消这一优先级''' result=re.findall("www.(baidu|bilibili).com","www.bilibili.com")#['bilibili'] result=re.findall("www.(?:baidu|bilibili).com","www.bilibili.com")#['www.bilibili.com'] print(result)
re.search:当匹配到第一个符合的结果后不再继续匹配,返回一个对像,可通过group()函数取匹配的结果
result=re.search('miku','miku miku ni shi te a ge ru')#<re.Match object; span=(0, 4), match='miku'> result=result.group()#miku
re.match:只匹配开头,返回一个对象
result=re.match('miku','miku miku ni shi te a ge ru').group()#miku # result=re.match('miku','kimi miku miku ni shi te a ge ru').group()#报错
re.split:按指定的字符串分割,将分割后的结果以一个列表的形式返回
result=re.split(' ','miku miku ni shi te a ge ru')#['miku', 'miku', 'ni', 'shi', 'te', 'a', 'ge', 'ru'] result=re.split('i','miku miku ni shi te a ge ru')#['m', 'ku m', 'ku n', ' sh', ' te a ge ru']
re.sub:将符合的匹配替换为指定的字符,
re.sub('匹配规则’,‘想要替换成的字符’,‘处理对象’,替换次数)
re.subn:返回替换结果的同时,返回替换次数
result=re.sub('miku','rin','miku miku ni shi te a ge ru',1)#rin miku ni shi te a ge ru result=re.subn('miku','rin','miku miku ni shi te a ge ru')#('rin rin ni shi te a ge ru', 2)
re.compile:可将一个匹配规则赋值给一个变量,通过该变量调用re中的方法,多次使用同一匹配规则
com=re.compile('miku') result=com.findall('miku miku ni shi te a ge ru')#['miku', 'miku'] result=com.findall('i like miku')#['miku']
re.finditer:将匹配的结果以一个迭代器的形式返回
result=re.finditer('miku','miku miku ni shi te a ge ru')#<callable_iterator object at 0x000001E1AD596128> result=result.__next__().group()