re 模块学习
2018-01-02 10:39 龙武大帝 阅读(226) 评论(0) 编辑 收藏 举报1 import re 2 3 a = re.match("192.*","inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255") 4 print(a.group()) #match只匹配开头 5 inet 6 7 '\w' 匹配[A-Za-z0-9] 8 '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb'] 9 '*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a'] 10 '?' 匹配前一个字符1次或0次,相比于不加任何东西,就是可以匹配不到 11 '{m}' 匹配前一个字符m次 12 '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb'] 13 '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC' 14 '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c 15 (abc){2}a(123|456)c #代表意思是(abc){2} abc匹配两次然后加一个a,(123|456)表示123或者456匹配了随便哪个匹配到了都可以,然后再加一个c 16 所以匹配结果是abcabca456c 17 '\d' 匹配数字0-9 18 >>> a = re.search("(\d{2})(\d{2})(\d{2})(\d{4})(\d{4})(\d{4})","362331199107184918") 19 >>> a 20 <_sre.SRE_Match object; span=(0, 18), match='362331199107184918'> 21 >>> a.groups() 22 ('36', '23', '31', '1991', '0718', '4918') 23 '\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的,这个和^效果是一样的 24 '\Z' 匹配字符结尾,同$ 25 '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 26 结果{'province': '3714', 'city': '81', 'birthday': '1993'} 27 匹配IP第一种方法: 28 >>> a = re.search('\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}','inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255') 29 >>> a 30 <_sre.SRE_Match object; span=(5, 16), match='192.168.2.1'> 31 >>> a.group() 32 '192.168.2.1' 33 第二种方法: 34 >>> a = re.search('(\d{1,3}.){3}\d{1,3}','inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255') 35 >>> a 36 <_sre.SRE_Match object; span=(5, 16), match='192.168.2.1'> 37 >>> a.group() 38 '192.168.2.1'
2、re.findall() & re.split()
>>> re.findall("\d+","ab3c4sdfd45634rf56hjh7") ['3', '4', '45634', '56', '7'] #所以的符合的规则以列表展示出来
>>> re.findall("\D+","ab3c4sdfd45634rf56hjh7") ['ab', 'c', 'sdfd', 'rf', 'hjh'] #D反向的取数据,这里即取出字母
>>> re.split("\d+","ab3c4sdfd45634rf56hjh7") ['ab', 'c', 'sdfd', 'rf', 'hjh', ''] #以数字分隔
>>> re.split("\\\\",r"c:\users\data\python35") ['c:', 'users', 'data', 'python35'] #如果以"\"分隔,那么我们需要用4个斜杠"\"来匹配
3、re.sub()
>>> re.sub("\d+","|","ab3c4sdfd45634rf56hjh7") 'ab|c|sdfd|rf|hjh|' #替换分隔,以什么为分隔符替换
>>> re.sub("\d+","|","ab3c4sdfd45634rf56hjh7",count=2) 'ab|c|sdfd45634rf56hjh7' #这里可以加替换的次数
4、其他
>>> re.search("a","ABC",flags=re.I) <_sre.SRE_Match object; span=(0, 1), match='A'> re.I 忽略大小写
>>> re.search("^a","\nabc\nqwe",flags=re.M) <_sre.SRE_Match object; span=(1, 2), match='a'> #匹配多行
>>> re.search(r".+","\nabc\nqwe",flags=re.S) <_sre.SRE_Match object; span=(0, 8), match='\nabc\nqwe'> re.S #匹配多行,全部匹配出来