一、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
正则常用方法

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-22
猜你喜欢
  • 2021-07-05
  • 2021-08-08
  • 2021-07-31
  • 2022-01-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案