一,re模块
1. findall search match (查找,匹配)
findall方法括号内参数 正则,字符串, 返回值是一个列表,匹配不到返回[] 空列表
如 ===> ret = re.findall('\s+','kjewhfqho254qfewgf') print(ret)
search 方法括号内参数 正则,字符串, 匹配到返回值是对象空间,,没有匹配到则返回None, 也经常用到if 语句中,如if ret1:print(ret1.group()) # 返回的对象通过group来获 取匹配到的第一个结果
如 ===> ret1 = re.search('\d','dg;ijwpggg.weqge') print(ret1)
match与search方法相类似,区别在于相当于在正则的开头加了了^ ,用来判断以什么开始的,不建议用
如 ===> ret2 = re.match('\d+','afw321653afdwqef') print(ret2.group())
2. sub subn (替换) split (切割)
sub方法,括号内 正则,替换的新值,字符串,替换次数(多少不会报错),返回值是字符串类型
subn 跟sub一样,除了会返回替换后的结果,还会返回替换的次数,是元组类型
如 ===> ret3 = re.sub('\d+','H','53463434dweqf53we1gfw5f') print(ret3)
split切割方法括号内 正则,字符串 返回值是个列表, 注意: 处理数据时,如果被切割的也显示出来,那就给正则那里加个括号(),这样就能显示出来
如 ===> ret4 = re.split('\d+','wegwerwg2564gfwe3g156') print(ret4)
3 ret5 = re.compile('-0\.\d+|-[1-9]+(\.\d+)?') # 多次用到这个正则表达式时,那么就用compile 命令节省时间效率
res = ret5.search('fgqgioh521-4551312qgwfgqwfge')# 只用传字符串就行
print(res.group())
ret0 = re.finditer('\d+','kfhqhegf564646.weg545-we5g4') #注意这个命令会帮我们拿到符合正则的字符串的迭代器,节省空间
for r in ret0:
print(r.group())
4, findall 会优先显示分组中的内容,要想取得分组优先, (?:正则表达式) 正则前面加?:
split 遇到分组 会保留分组内被切掉的内容
search 如果search中有分组的话,通过group(n)就能够拿到group中的匹配的内容
5, 分组的命名
启名字
(?P<name>正则表达式) 表示给分组起名字
如: ====> ret = re.search('<(?P<name>\w+)>\w+</(?P=name)>','<h1>hello</h1>') print(ret.group('name'))
通过索引使用分组
(?P=name)表示使用这个分组,这里匹配到的内容应该和分组中的内容完全相同
如: ====> ret = re.search('\d+(.\d+)(.\d+)(.\d+)?','1.2.3.4-2*(60+(-40.35/5)-(-4*3))')
print(ret.group()) print(ret.group(1)) print(ret.group(2))
二,(1)random模块 随机算法: 在某个范围内,取到每一个值的概率是相等的
无限循环小数计算机可以表达,无限不循环小数,计算机表达不了,π这个值是也不能取完,它在单独的math模块里
import random
随机小数
random.random() ===> 0-1之内的随机小数
random.uniform(1,5) ===> 1-5之内的随机小数
随机整数
random.randint(1,2) 这是闭区间,顾头顾尾
random,randrange(1,2) 这是顾头不顾尾 random.randrange(1,6,2) 按步长取值,顾头不顾尾
随机抽取 能操作字符串,列表,元组,字典不可操作
random.choice(1) ==> 随机抽取一个值
random.sample(lis,2) ===> 随机抽取多个值
打乱顺序 (只能操作列表)
random.shuffle(lis)
(2) 随机生成4位数字验证码:(也可指定多位数字验证码)
def ran_code(n = 4):
code = ''
for i in range(n):
num = random.randint(0,9)
code = code + str(num)
return code
ret = ran_code(6)
(3) 随机生成4包含数字和大小写字母(也可指定多位数字验证码)
def ran_code(n = 4,a = Ture):
code = ''
for i in range(n):
ran_num = str(random.randint(0,9))
if a:
ran_alph = chr(random.randint(97,122))
ran_alph_upper = chr(random.randint(65,90))
ran_num = random.choice(ran_num,ran_alph,ran_alph_upper)
code = code + ran_num
return code
ret = ran_code(6,a = False)
print(ret)