Python中re、shutil、argparse库

一、re库

是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

  1. 创建一个匹配的正则表达式:pattern
  2. 用该正则表达式去匹配用户的输入来判断是否合法

正则表达式的一般描述方式:

  • \d:可匹配一个数字
  • \w:可匹配一个字母或数字
  • \s:匹配一个空格(包括Tab等空白符)
  • \d{3},\d{3,8}:匹配3个数字,匹配3-8个数字
  • {n}表示n个字符,{n,m}表示n-m个字符
  • *表示任意个字符,包括0个
  • +表示至少一个字符
  • ?表示0个或1个字符
  • 转义字符\的使用

正则表达式的强化描述方式:

  • [0-9a-zA-Z\_]:可以匹配一个数字、字母或者下划线
  • [0-9a-zA-Z\_]+:可以匹配至少由一个数字、字母或者下划线组成的字符串,比如 'a100' , '0_Z' , 'Py3000' 等等
  • [a-zA-Z\_][0-9a-zA-Z\_]*:可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量
  • [a-zA-Z\_][0-9a-zA-Z\_]{0,19}:更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
  • A|B:可以匹配A或B
  • ^表示行的开头
  • ^\d表示必须以数字开头
  • $表示行的结束
  • \d$表示必须以数字结束
  • 正则表达式建议使用‘r’前缀,就不用考虑转义的问题
1 import re
2 ma = re.match('^\d{3}\-\d{3,8}$','010-1234567')
3 print(ma)
4 
5 #结果
6 <re.Match object; span=(0, 11), match='010-1234567'>
7 span表示的是匹配的数量
8 match表示的是匹配的内容
如果不匹配,返回值就是None

 分组:除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用 () 表示的就是要提取的分组(Group)

  • ^(\d{3})-(\d{3,8})$:分别定义了两个组,再加上默认的分组,分别为ma.group()是010-1234567、ma.group(1)是010、ma.group(2)是1234567
1 t = '19:05:30'
2 m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)
3 
4 m.groups()

 re.search()函数、re.match()函数、re.findall()函数:

  • re.search()函数:匹配不限位置,只要有匹配就行
  • re.match()函数:只会匹配目标字符串开头是否满足正则表达式,若开头不满足则匹配失败,函数返回None
  • re.findall()函数:匹配目标字符串中所有满足条件的正则表达式
 1 import re
 2 text = "生于杭州市余杭区,成长经历地杭州市余杭区,居住较长的地区杭州市余杭区69年,无疫区居住史,无冶游史,有饮酒习惯,酒类:白酒,每天500-600ml,已饮30年,未戒。,有吸烟习惯,种类:纸烟,每天20-30支,已吸30年,已戒6年。,否认毒物及放射性物质接触史。既往在矿场工作。"
 3 pattern = r'(有吸烟习惯)[,,]种类[::]纸烟[,,](每[天日周月]\d{1,2}-\d{1,2}[支根])[,,]已吸(\d{1,2}年)[,,](已戒)(\d{1,2}年)。'
 4 result = re.search(pattern, text)
 5 result1 = re.match(pattern, text)
 6 result2 = re.findall(pattern, text)
 7 
 8 print(result)
 9 print(result1)
10 print(result2)
11 print(type(result2))
12 
13 #结果
14 <re.Match object; span=(84, 116), match='有吸烟习惯,种类:纸烟,每天20-30支,已吸30年,已戒6年。'>
15 None
16 [('有吸烟习惯', '每天20-30支', '30年', '已戒', '6年')]
17 <class 'list'>

 

二、shutil库

作为os模块的补充,提供复制、移动、删除、解压等操作

  • 复制文件shutil.copy(src,dst)
  • 复制文件夹shutil.copytree(src,dst)
  • 移动文件或文件夹shutil.move(src,dst)
  • 删除文件夹(不可删除文件)shutil.rmtree(src)
  • 创建和解压压缩包zipobj.write()创建一个压缩包、zipobj.namelist()读取压缩包中的文件信息、zipobj.extract()将压缩包的单个文件解压出来

 

三、argparse库

是python用于解析命令行参数和选项的标准模块

#后续用到时再补充

 

posted @ 2022-08-22 11:34  几何0814  阅读(136)  评论(0)    收藏  举报