一、re模块
二、time时间模块
三、datetime时间模块
四、random模块
五、OS模块
六、sys模块
七、shutil模块
八、json &pickle模块
九、shelve模块
十、xml模块
十一、configparse
十二、hashlib模块
十三、subprocess子进程模块
一、re模块
正则表达式参考url:https://blog.csdn.net/yufenghyc/article/details/51078107
常用匹配模式,如下表
#重复:.|?|*|+|{m,n}|.*|.*? #.代表任意一个字符,\n除外 print (re.findall('a.b','a b a1b a\nb a-b aaaaab',re.DOTALL)) #re.DOTALL参数可以让*匹配到换行符\n ['a b', 'a1b', 'a\nb', 'a-b', 'aab'] #?:代表?号左边的字符出现0次或者1次 print (re.findall('ab?','a ab abb aba abbb a1b')) ['a', 'ab', 'ab', 'ab', 'a', 'ab', 'a'] #*:代表*号左边的字符出现0次或者无穷次 print (re.findall('ab*','a ab abb aba abbb a1b')) ['a', 'ab', 'abb', 'ab', 'a', 'abbb', 'a'] #+:代表+号左边的字符出现1次或者无穷次 print (re.findall('ab+','a ab abb aba abbb a1b')) ['ab', 'abb', 'ab', 'abbb'] #{m,n}:代表{m,n}左边的字符出现m次或者n次 print (re.findall('ab{2,3}','a ab abb aba abbb a1b')) ['abb', 'abbb'] print (re.findall('ab{0,}','a ab abb aba abbb a1b')) #0到无穷次 ['a', 'ab', 'abb', 'ab', 'a', 'abbb', 'a'] #.*代表0到无穷的任意字符,贪婪匹配 print (re.findall('a.*b','xxxy123a1234b5678b')) #会匹配到最后一个b ['a1234b5678b'] #.*?代表非贪婪匹配(经常使用),固定搭配 print (re.findall('a.*b','xxxy123a1234b5678b')) ['a1234b'] # |:或者 print (re.findall('she|he','she is girl,he is boy!')) ['she', 'he'] # ():代表分组,re.findall()默认返回分组里内容 print (re.findall('compan(y|iess)','too many companiess have gone bankrupt,and the next one is my company')) ['iess', 'y'] print (re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击我</a>')) #只取链接 ['http://www.baidu.com'] #(?:y|iess)得到整体,即包含分组外部分,固定写法,注:re.search()和re.match(),以及re.sub()不写?:,得到的也是整体,而re.findall()与re.split()都需要写?:才可以得到整体 print (re.findall('compan(?:y|iess)','too many companiess have gone bankrupt,and the next one is my company')) ['companiess', 'company']
#rawstring:不转义\,,首先交给python语法不能转义r,在交给C语言re模块转义一次,得到结果a\c
print (re.findall(r'a\\c','a\c alc aBc'))
['a\\c'] #答案无错
#[]: 取中括号内任意的一个
print (re.findall('a[a-z]b','axb azb aAb a1b a+b a-b')) #取中间小写字母
['axb', 'azb']
print (re.findall('a[a-zA-Z]b','axb azb aAb a1b a+b a-b')) #取中间所有字母,不管大小写
['axb', 'azb', 'aAb']
print (re.findall('a[-+*/]b','axb azb aAb a1b a+b a-b')) #取加减乘除,减号-要在首位或者尾部,除非出现取反^
['a+b', 'a-b']
print (re.findall('a[^-+*/]b','axb azb aAb a1b a+b a-b')) #非加减乘除
['axb', 'azb', 'aAb', 'a1b']
#re模块的其他方法 #re.search()只匹配一个符合的,有结果返回对象,没结果返回None print (re.search('a[^-+*/]b','axb azb aAb a1b a+b a-b')) <_sre.SRE_Match object; span=(0, 3), match='axb'> #查看结果 print (re.search('a[^-+*/]b','axb azb aAb a1b a+b a-b').group()) axb #re.match():从开头取1个符合的,相当于re.search('^a[^-+*/]b'),有结果返回对象,没结果返回None,记住re.search()就行 print(re.match('a[^-+*/]b', 'a2b axb azb aAb a1b a+b a-b')) <_sre.SRE_Match object; span=(0, 3), match='a2b'> #查看结果 print (re.match('a[^-+*/]b','a2b axb azb aAb a1b a+b a-b').group()) a2b print (re.search('^a[^-+*/]b','a2b axb azb aAb a1b a+b a-b').group()) a2b #re.split()类似字符串的str.split(),就是此处可以用正则表达式进行分隔 print (re.split(':','root:x:0:0::/root:/bin/bash')) ['root', 'x', '0', '0', '', '/root', '/bin/bash'] #maxsplit=1,只切1次 print (re.split(':','root:x:0:0::/root:/bin/bash',maxsplit=1)) ['root', 'x:0:0::/root:/bin/bash'] #re.sub():替换 print (re.sub('root','lisl','root:x:0:0::/root:/bin/bash')) lisl:x:0:0::/lisl:/bin/bash #只替换1个 print (re.sub('root','lisl','root:x:0:0::/root:/bin/bash',1)) lisl:x:0:0::/root:/bin/bash #(了解)将第一个单词和最后一个单词对调,()分组,\n代表第n个分组 #^:开头;([a-z]+)任意个字母;([^a-z]+)任意个非字母;(.*)任意个字符,贪婪匹配;$结尾 print (re.sub('^([a-z]+)([^a-z]+)(.*)([^a-z]+)([a-z]+)$',r'\5\2\3\4\1','root:x:0:0::/root:/bin/bash')) bash:x:0:0::/root:/bin/root #re.compile(),写一个正则表达式,好处:可以任意调用 obj=re.compile('a\d{2}b') #a与b之间至少俩个数字,只能首位a,末尾b print (obj.findall('aa22bb 2a1b a221b aAba12b')) ['a22b', 'a12b'] print (obj.search('aa22bb 2a1b a221b aAba12b').group()) a22b