文章目录

  • 一、要求输入的密码,必须是8位,数字字母特殊字符混合,必须有大写和小写字母
  • 二、正则表达式-零宽断言
  • 1.正先行断言
  • 2.反先行断言
  • 3.正后发断言
  • 4.反后发断言
  • 三、正则表达式取出值
  • 四、执行下面的代码验证
  • 五、Python操作Mysql数据库


一、要求输入的密码,必须是8位,数字字母特殊字符混合,必须有大写和小写字母

第一种方法
Python使用正则表达式验证密码必须包含大小写字母和数字校验密码是否合法的程序。
输入一个密码
1、长度5 - 10位
2、密码里面必须包含,大写字母、小写字母和数字
3、最多输入5次
遇到的问题:
1.
使用正则表达式验证密码必须包含大小写字母和数字,此为不要求字符数的格式,验证后为有效。
^ (?:(?=.*[A-Z])(?=.*[a - z])(?=.*[0-9])).* $

若要求密码的字数,则格式为:
^ (?:(?=.*[A-Z])(?=.*[a - z])(?=.*[0-9])).{5, 10}$

在python中使用re.match进行验证,若符合则返回match值,若不符合,则返回None
re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$", pwd) == None:

代码如下:
import re

for i in range(5):
    pwd = input('Please input your password:')
    if len(pwd) < 5 or len(pwd) > 10:
        print('The length of pwd should be 5-10!')
    elif re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$", pwd) == None:
        print('密码必须含大小写字母和数字!')
    else:
        print('Password match the requirements!')
        break
else:
    print('You have tried more than 5 times!')
#第二种方法
import re
username = input('请输入')
username = 'DSFDhello!@12eee'

def test(username):
    result = re.findall('([A-Z]+)|([a-z]+)|(\d+)|([^a-zA-Z\d\s_]+)', username)
    l = list(result[0])
    for a in result[1:]:
        for i in range(len(l)):
            if l[i]=='' and a[i]!='':
                l[i] = a[i]
    return any(map(lambda x:x=='',l))==False and len(username)==8
username = '1A34#@q5'
print(test(username))

# re.match('^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).{5,10}$')

username = 'qqqwQ@#1'
# r = re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$",username)
r = re.match('^(?=(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).{5,10}$',username)
# r = re.match('^(?=.*[A-Z]).*$', username)
print(r)

二、正则表达式-零宽断言

1.正先行断言

解析:首先查找字符串”abcgwcab”中gw位置,断言为真,然后再匹配 bc,然后再向后匹配。

import re
str = 'abcgwcab'
pattern = 'bc(?=gw)'
result = re.search(pattern,str)
print(result.group())

结果:bc

2.反先行断言

import re
str = 'abcgwcab'
pattern = 'bc(?!ww)gw'
result = re.search(pattern,str)
print(result.group())

结果:bcgw
解析:首先判断字符串是否包含bc,然后判断其后面不是ww,断言为真,然后从 bc 处进行匹配 gw。

3.正后发断言

import re
str = 'abcgwcab'
pattern = '(?<=gw)ca'
result = re.search(pattern,str)
print(result.group())

结果:ca
解析:首先判断字符串是否包含 gw ,然后查找后面是否有 ca,存在,断言为真,则从 ca 处开始继续匹配

4.反后发断言

import re
str = 'abcgwcab'
pattern = '(?<!bc)gw'
result = re.search(pattern,str)
print(result.group())

解析:首先查找字符串中是否包含 gw ,然后判断 gw 前面是不是 bc ,如果是则返回 False。 如果不是,则返回 True,然后从 gw 处开始匹配。

三、正则表达式取出值

# 从<Tom paris>tom@voyager.org取出:Tom paris
# 从bob@example.com取出:bob

import re
a = '<Tom paris>tom@voyager.org'
b = 'bob@example.com'

# 1.第一种
result1 = ''.join(re.findall('<(.*?)>',a))
print(result1)
result2 = ''.join(re.findall('(.*?)@',b))
print(result2)

# 2.第二种
r = re.findall('(<([\w ]+)>\w+)|(\w+)\@',a)[0]
last = r[1] if r[1]!='' else r[2]
print(last)
r = re.match('^(<([\w ]+)(?=.*?\>\w+\@))|(\w+)(?=.*?@).*$',b)
print(r.groups())

结果:
Tom paris
bob
Tom paris
(None, None, 'bob')

四、执行下面的代码验证

import re
def is_valid_email(email):

    r = re.match('^([\w\.]+)(?=@).*$', email)
    # print(r.groups())
    if r:
        return True
    else:
        return False

assert is_valid_email('someone@gmail.com')
assert is_valid_email('bill.gates@microsoft.com')
assert not is_valid_email('bob#example.com')
assert not is_valid_email('mr-bob@example.com')
print('ok')

结果:ok

五、Python操作Mysql数据库

import pymysql

#打开数据库
conn = pymysql.connect(
    user='root',       #用户名
    password='123xxx', #密码
    port=3306,         #端口,默认为3306
    host='127.0.0.1',  #连接名称,默认127.0.0.1
    charset='utf8',    #字符编码
    db='testx'         #数据库名称
                      )#建立连接

#获取游标
cursor = conn.cursor()  #cursor返回一个游标实例对象,其中包含了很多操作数据的方法,比如执行sql语句。

1.查询
sql = 'select * from student'
cursor.execute(sql)
result = cursor.fetchall()  #获取接口
print(result)  #这样就把数据库里面的信息查出来了
conn.close()   #查询完毕,需要关闭连接,释放计算机资源

import random
from faker import Faker
faker=Faker(locale="zh_CN")

2.修改
gender_list =[1,2]
for i in range(5):
    sql1 = 'insert into student(username,gender,address,status) values("{}","{}","{}","{}")'.format(faker.name(),random.choice(gender_list),faker.address(),1)
    result1 = cursor.execute(sql1)
    print(result1)
conn.commit()  #事务的提交
conn.close()  #查询完毕,需要关闭连接,释放计算机资源,关闭查询游