代码改变世界

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   #匹配多行,全部匹配出来