正则表达式纪要
1.正则表达其实就是一门小型语言。
2 方法
3编译标志位,
re.I使匹配对大小写不敏感,
re.L做本地化识别(locale-aware)匹配
re.M多行匹配影响^和$符
re.S 使. 匹配包括换行符以内的所有字符 默认.不会匹配换行符
re.U根据Unicode字符集解析字符,这个标志影响\w \W \b \B
re.X 该标志通过给以你更灵活的格式以便你将正则表达式写的更容易理解
4分组 分组其实就是在你匹配到的结果里面再去做匹配。
1. match()分组
import re a='h1a s1h3k4jgfg45fe4fe3rgdt5' text=re.match(r'h(?P<name>\w*)',a) b=text.group()#没有分组的结果 c=text.groups()#取到分组的结果加到一个元组里面 d=text.groupdict()#获取分组结果并给分组起一个名字,作为一组键值对加入一个字典里面。?P<name>就是给分组取名字叫name print b ,c, d
2.findall()分组
import re a='h1a s1h3k 4jgfg45fe4fe3rgdt5' text=re.findall(r'h(\w*)',a)#把他的分组都拿到,如果有分组就只那分组结果给你 print text
3.split()分组
import re a='aaa1bbbb1cccc1' b=re.split('(1)',a,1)#没有分组执行结果['aaa', 'bbbb1cccc1'],有分组的结果['aaa', '1', 'bbbb1cccc1'] print b
1,findall方法是去吧一个字符串中所有符合规则的匹配出来,并且以一个列表的形式返回。(最常用的)
import re a='jhfofhasohclchjzxlcerfeikfjaslfj;lfjerfei' b=re.findall('erfei',a) print b
2,match方法
import re a='comwww.runcomoob' b=re.match('com',a)#t他返回是一个对象,match只匹配起始位置 c=b.group()#t通过group去里面取值, d=b.span()#返回匹配的开始和结束位置 #start()返回匹配的开始位置,end()返回匹配的结束位置, print c,d
3,search方法
import re a='www.runcomoob' b=re.search('com',a)#他只匹配第一个匹配到第一个就返回了 c=b.group() d=b.span() #start() print c,d
4,findater()跟findall()只有一点区别就是他是返回一个对象你自己遍历去取,fandall()是返回一个列表。
5,sub, 和subn
import re a='www.comrcomuncomoob' b=re.sub('com','mon',a,2)#他是匹配替换第一个参数是匹配规则,第二个参数是要替换成的字符串,第三个参数是要匹配的字符串,第四个参数是最大替换次数。 print b# 返回的是替换后的结果 #subn()和sub()只有一点不同,subn返回结果并返回替换次数。
6,split()
import re a='aaa1bbb2ccc3ddd4' b=re.split('\d',a,)#分割字符串 print b#
7,compile() 工厂方法,他吧匹配规则封装成一个对象,用于调用。
import re a='kas1h3k4jgfg45fe4fe3rgdt5' text=re.compile('\d') b=text.findall(a) print b
2 最常用的元字符
1, . ^ $ * + ? {} [] () \ 元字符本身也是普通字符,只不过他有特殊的功能。
2,这些元字符,在[]里面不在具有特殊意义,有3个例外,第一个是 - 表示范围 ^ 尖角符在[]里面表示非的意思,还有 \
3 , \ 反斜杠 如果在元字符前加上反斜杠取消元字符的特殊意义, \ 加上一些普通字符具有特殊意义如\d
1,\d 匹配任何十进制数,相当于数字[0-9]
2,\D 匹配任何非数字字符,相当于[^0-9]
3, \s匹配任何空白字符,相当于类[\t\n\w\r\v]
4, \s匹配任何非空白字符,相当于类[^\t\n\w\r\v]
5, \w 匹配任何字母数字字符,相当于[0-9a-zA-Z]
6, \W 匹配任何非字母数字字符,相当于[^0-9a-zA_Z]
7, \b 匹配一个单词边界,也就是单词和空格间的位置,匹配单词边界包括开始和结束位置,这里的单词是指连续的数字,字母和下划线组成的字符串
注意,\b 的定义是\W 和\w 的交界
import re
f='23213212412jjjk12312312221j31k2k12j31231234' c=re.findall('[a-z]',f) print c 1,[ ]他通常来指定一个字符类别,所谓字符类别就是你想匹配一个字符集。 字符可以单个列出也可以用‘-’隔开来给定一个字符范围'[a-z]'就是说匹配小写 字母a到z之间的所有字母(包含啊a和z),如果想匹配大写字母就是[A-Z] 数字就是[0-9]
import re a='jhfofhasohclchjzxlcerfeikfjaslfj;lfjerfei' b=re.findall('er.ei',a) print b . 号这个点表示匹配除了换行符以外的所有字符(通配符)
import re a='erfeijhfofhasohclchjzxlcerfeikfjaslfj;lfjerfei' b=re.findall('^er.ei',a) print b ^ 尖角符表示开始位置,也就是说只有在开始位置存在符合规则的就可以匹配到,否则就匹配不到(只匹配开头位置的一个)
import re a='erfeijhfofhasohclchjzxlcerfeikfjaslfj;lfjerfei' b=re.findall('er.ei$',a) print b $ 这个符号表示匹配的终止位置,(只匹配终止位置)如果有就返回, 没有就为空
#!coding=utf-8 import re a='jhfofhasohclchjzxlcerfeikfjaslfj;lfjerfei' b=re.findall('er.{,3}ei',a) print b # * + ? { } 都表示重复 *号表示0到多次就是说*号前面的字符出现0到无限次都能匹配,+号表示1到多次,就是说如果+号前字符出现0次就匹配不到了 # ? 号表示0到一次 ,{} 表示匹配范围{5}就是匹配5次如果是{1,5}表示匹配1到5次,就是说你想几次就几次(太好用了)