python3-牛逼的正则模块re、随机验证码的实现

正则模块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 字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Recently 祝祝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值