python学习Day26
Day 26
今日内容概要
- 完善购物车功能
- 正则表达式
- 正则表达式—字符组
- 正则表达式—特殊符号
- 正则表达式—量词
- 正则表达式练习题
- 贪婪匹配与非贪婪匹配
- 取消转义
- 正则表达式实战
今日内容详细
1.完善购物车功能
尝试扩展购物车功能(课外扩展)
查看购物车数据(用较为好看的方式展示)
编辑购物车数据(商品的移除、数量的增减)
2.正则表达式
'''
该知识点是一门独立的学科
主要用于做数据的查找与筛选
1.网络爬虫
2.写代码时
3.运维
'''
正则表达式就是用一些符号的组合产生出特殊的含义去字符串中筛选符合条件的数据
正则表达式线上测试网址:http://tool.chinaz.com/regex/
1.正则表达式前戏
需求:用python代码逻辑实现编写校验用户手机号是否合法
常见 13 15 17 18
#1.获取用户输入的手机号
phone_num=input('输入您的手机号:').strip()
#2.判断是否都是数字
if phone_num.isdigit():
#3.判断长度是否为11位
if len(phone_num)==11:
# #4.把手机号转换为整数型
# phone_num=int(phone_num)
#4.用字符串内置方法判断是否是常见的电话号码开头 13 15 17 18
if phone_num.startswith('13')or phone_num.startswith('15')or phone_num.startswith('17')or phone_num.startswith('18'):
print('手机号合法')
print(int(phone_num))
else:
print('手机号开头不正确')
else:
print('手机号必须11位')
else:
print('手机号必须纯数字')
————————————————————————————————————————————————————————
用正则表达式:
import re
phone_num=input('输入您的手机号:').strip()
#字符串必须是13或15..开头,出现9位数,每位0-9任意数
if re.match('^[13|15|17|18][0-9]{9}',phone_num):
print('手机号合法')
print(phone_num)
else:
print('输入有误')
总结:
正则表达式就是用一些符号的组合产生出特殊的含义去字符串中筛选符合条件的数据
2.1.正则表达式—字符组
1.字符组在没有量词修饰的情况下一次只会针对一个数据值
字符组 | 含义 | 举例 |
---|---|---|
[0-9] | 匹配0到9的任意一个数字(包括0和9) | 全称是:[0123456789] |
[A-Z] | 匹配A到Z的任意一个字母(包括A和Z) | 全称是:[ABC..XYZ] |
[a-z] | 匹配a到z的任意一个字母(包括a和z) | 全称是:[abc..xyz] |
[0-9a-zA-Z] | 在中括号内编写的多个数据值彼此都是或的关系 | 数字、大小写字母都可以 |
2.2.正则表达式—特殊符号
1.特殊符号在没有量词修饰的情况下一个符号一次只会针对一个数据值
特殊符号 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或数字或下划线 |
\d | 匹配数字 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
^数据$ | ^与$的组合能够明确限制想要查找的具体数据 |
a|b | 匹配字符a或字符b(管道符在大多场景下是或的意思) |
() | 给正则表达式分组 不影响正则表达式的匹配(用于后续的正则起别名,分组获取对应数据) |
[] | 匹配字符组中的字符 |
[^] | 匹配除了字符组中字符的所有字符 |
2.3.正则表达式—量词
1.在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的)
量词不能单独使用,必须跟在表达式后面,且只能影响紧挨着的左边那一个表达式
量词 | 含义 |
---|---|
* | 重复0次或更多次(默认就是一次性匹配尽可能多的) |
+ | 重复1次或更多次(默认就是一次性匹配尽可能多的) |
? | 重复0次或1次(默认就是1次) |
重复n次,写几是几 | |
重复n次或更多次 | |
重复n到m次 |
2.4.正则表达式练习题
'正则表达式 待匹配字符 结果'
海. 海燕海娇海东 海燕 海娇 海东
^海. 海燕海娇海东 海燕
海.$ 海燕海娇海东 海东
李.? 李杰和李莲英和李二棍子 李杰 李莲 李二
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
李.{1,2} 李杰和李莲英和李二棍子 李杰和 李莲英 李二棍
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子
李[^和]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子
[\d] 456bdha3 4 5 6 3
[\d]+ 456bdha3 456 3
2.5.贪婪匹配与非贪婪匹配
待匹配的文本:<script>alert(123)</script>
正则表达式:<.*> # 贪婪匹配
上述正则匹配出来的内容是:<script>alert(123)</script>
正则表达式:<.*?> # 非贪婪匹配
上述正则匹配出来的内容是:<script> </script>
"""
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志由上述符号左右两边添加的表达式决定
"""
2.6.取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠。单个\n是匹配换行符
\\n \n
\\\\n \\n
在python中有更加简便的写法
r'\n'
r'\\n'
2.7.正则表达式实战
编写校验用户手机号的正则
0?(13|14|15|17|18|19)[0-9]{9}
编写校验用户身份证的正则
\d{17}[\d|x]|\d{15}
编写校验用户邮箱的正则
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
编写校验用户qq号的正则
[1-9]([0-9]{5,11})
"""
常见的正则表达式百度查找即可
"""
作业
1.整理今日内容及博客 继续编写购物车功能
2.完善购物车功能
查看购物车
移除购物车商品
修改购物车数量
...
ps:写完后 优化代码结构(省代码 封函数等)
3.预习明日内容
re模块 random模块 hashlib模块