正则模块re
牛刀小试:
import re
f=open("兼职模特空姐联系方式.txt",encoding='UTF-8')
phone_number= re.findall("[0-9]{11}",f.read())
print(phone_number)
输出:
re 匹配语法:
讲解:1:re.split()匹配到的字符就是分隔点,没有匹配到的就''
表示,
print(re.split("[0-9]","shimmer1you1can2be3better"))
print(re.split("[a-z]","shimmer1you1can2be3better"))
运行结果:
['shimmer', 'you', 'can', 'be', 'better']
['', '', '', '', '', '', '', '1', '', '', '1', '', '', '2', '', '3', '', '', '', '', '',
2:re.findall只匹配字符,不会出现没匹配到是地方用其他字符代替
print(re.findall("[a-z]","shimmer1you1can2be3better"))
运行结果:
['s', 'h', 'i', 'm', 'm', 'e', 'r', 'y', 'o', 'u', 'c', 'a', 'n', 'b', 'e', 'b', 'e', 't', 't', 'e', 'r']
3:re.sub()匹配到的字符进行替换
sub(pattern, repl, string, count=0, flags=0):
从上面的代码中可以看到re.sub()方法中含有5个参数,下面进行一一说明(加粗的为必须参数):
(1)pattern:该参数表示正则中的模式字符串;
(2)repl:该参数表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;
(3)string:该参数表示要被处理(查找替换)的原始字符串;
(4)count:表示是要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;
(5)flags:表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。
print(re.sub("ABC","abc","skjdldfABClas;dkABC"))
print(re.sub("abc","123","skjdzabcldfABCabclas;dkABC"))
print(re.sub("ABC","abc","skjdldfABClas;dkABC",count=1))
print(re.sub("[a-z]","1","skjdldfABClas;dkABC"))
print(re.sub("[A-Z]","9","skjdldfABClas;dkABC"))
运行结果:
skjdldfabclas;dkabc
skjdz123ldfABC123las;dkABC
skjdldfabclas;dkABC
1111111ABC111;11ABC
skjdldf999las;dk999
4:re.fullmatch()全部匹配:一个字符不同就不输出
5:re.complie():先提前定义,之后可以直接用
p=re.compile("[1-9]{11}")
print(p.search("18296356583568"))
运行结果:
<re.Match object; span=(0, 11), match='18296356583'>
学习学的就是正则的规则:点开它正则规则清晰掌握
import re
print(re.search(".","shimmer"))#.匹配任意字符
print(re.search("^s123","s123sdhjjd"))#^匹配开头
#分组匹配
id_num="213265623546323"
a = re.search("([0-9]{3})([0-9]{3})([0-9]{4})",id_num)
print(a.groups())
print(a.group())
print(a.groupdict())
a=re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<brithday>[0-9]{4})",id_num)
print(a.groupdict())
特例说明:将字符串全部匹配出来
s="123+234*123-458/256"
print(re.split("\-\+\*\/",s))
运行结果:
['123+234*123-458/256']
应用:匹配电话号码:
import re
def is_phone(ok, false=None):
p=re.compile("[1-9][0-9]{10}")
if p.match(ok):
return True
else:
return false
def chcek_phone(ok):
if is_phone(ok):
print("yes ok")
else:
print("you are wrong")
p=input("请输入一个电话号码:")
chcek_phone(p)
随机验证码实现
在平时我们会遇到4位数的验证码或者是六位数的验证码,只需要在下面代码中设置size的大小即可
#首先导入random模块
import random
#设置一个函数,size 为验证码的长度
def make_code(size=4):
res=''
#循环实现字符串的长度,也就是验证码的长度
for i in range (size):
#random.randint()输出范围内的整数,chr是用于转义字符用的,把数字转义成ASCII 字符
#65-90对应的ASCII 字符是大写字母A-Z
s1=chr(random.randint(65,90))
#113-122对应的ASCII 字符是小写字母a-z
s2=chr(random.randint(113,122))
s3=str(random.randint(0,9))
#用一个字符串把所取到的随机数存起来,并通过+相连
#+在字符串里的作用是连接
res+=random.choice([s1,s2,s3])
#最后返回
return res
#调用
print(make_code(4))
结果:
1:chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回值是当前整数对应的 ASCII 字符。