python 基础(十五)------正则表达式

目录

15.1 re正则表达式

15.1.1 元字符 

15.1.2 数量规则

 15.1.3 边界处理

15.1.4 分组匹配

15.2 作业

15.3 解析 


15.1 re正则表达式

正则表达式:普通字符和元字符构成的字符串,描述一类字符串规则

match()  从左往右匹配,匹配了就返回结果,如果匹配不上就会None
findall()  匹配上的都会放到列表里面去

15.1.1 元字符 

正则表达式:习惯性在字符串前面加r,变成原始字符串

元字符: 匹配单个字符

.   表示任意一个字符,但是除了\n
\d  表示0-9之间任意一个数字 
\D  表示 非数字
\s  表示 空白   \n \t
\S  表示 非空白
\w  表示 英文字母,数字,下划线
\W  和\w相反
# [\d\D]  数字 或者 非数字  =》 任意字符
字符集:同样只能匹配单个字符,使用中括号来表示,表示一个字符范围
import re
# \d 0~9
print(re.match('[0123456789]', 'zc')) # 属于0123456789 都复合
print(re.match('[A-z]', 'zZ'))  # 全体字母
print(re.match('[0-9]', '3A'))  # 匹配 0-9范围内的数字
print(re.match('[^a-e]', 'f'))  #  匹配a-e以外的字符串

15.1.2 数量规则

数量符号
* 匹配前一个字符的任意次数,包括0次   
+ 匹配前一个字符重复匹配1次以上的     >=1
    t = ''
    res = re.match('\w*',t)
    print(res)
    res = re.match('\w+',t)  #
    print(res)
? 匹配前一个字符出现0次或者1次
{m}    匹配前一个字符的m次数
{m,}   至少匹配m次数以上
{m,n}  至少匹配m次以上,  n次以下


t = '18528322390'
res = re.match('\d*',t)
print(res)
res = re.match('\d+',t)  # 贪婪模式
print(res)
res = re.match('\d?',t)  # 贪婪模式 
print(res)

res = re.match('\d{3,6}',t)
"""
\d\d\d
\d\d\d\d
\d\d\d\d\d
\d\d\d\d\d\d
"""

 15.1.3 边界处理

边界就是开始和结尾

^ 开始   ps: 注意这个不是表示取反,取反只在 [] 叫做取反
$ 结束  

# 电话
# 长度是11位
# 第一位 [1]
# 第二位 [358]
# 第三位 [56789]


t = '18528322390'
res = re.match('^[123][358][56789]\d{8}$',t)
print(res)

15.1.4 分组匹配

# 第一种情况 首位是0
# 0[1-9]   01 02 03 04 05 06 07 08 09

# 1[0-2]   10 11 12

或者 |    shift + \
t = "9999-00-14"
print(re.match('\d{4}-(0[1-9]|1[0-2])-\d{2}',t))


() 起到一个分组的作用

res = re.match('(\d{4})-(0[1-9]|1[0-2])-(\d{2})',t)

print(res.group(1))
print(res.group(2))
print(res.group(3))
print(res.groups())

\1  和第一个分组中的内容相同
\2  和第二个分组中的内容相同
xml = "<title>hello</title>"
res = re.match(r'<(\w+)>(.*)</(\1)>', xml)
print(res)



取别名 (?P<名字>)
(?P=名字)
xml = "<title>hello</title>"
res = re.match(r'<(?P<tag>\w+)>(.*)</(?P=tag)>', xml)
print(res)

15.2 作业

改进 石头剪刀布

制作一个跟电脑对战的剪刀锤子布小游戏(电脑随机出招),进入游戏时候提示当前时间,并需要登录密码。


密码规则:
总共是11位,第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666则满足。 
 

15.3 解析 

mport re
import random

# 改进 石头剪刀布
#
# 制作一个跟电脑对战的剪刀锤子布小游戏(电脑随机出招),进入游戏时候提示当前时间,并需要登录密码。
#
#
# 密码规则:
# 总共是11位,第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
# 例如:18601088888、13912366666则满足。


for i in range(3):
    mima = input("请输入密码登录:")
    res = re.match(r'^1[3458]\d{4}(\d)\1{4}$', mima)
    if res != None:
        print("登录成功")
        count = 3
        while count:
            a = input("请出拳(石头/剪刀/布):")
            b = ['石头', '剪刀', '布']
            c = random.choice(b)
            win_list = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']]
            me = print("你出拳:", a)
            NPC = print("计算机出拳:", c)
            if a in b:
                count -= 1
                if me == NPC:
                    print("平局")
                elif [me, NPC] == win_list:
                    print("恭喜你!赢了")
                    count += 1
                else:
                    print("很遗憾,你输了")
            else:
                print("输入错误")

            print("你还有剩余机会", count)
    else:
        print("密码错误,登录失败")
        print("你还有%d机会" % (2 - i))
print("机会用完,密码还是错误,所以登录失败")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值