day27
re模块
findall 找到所有符合规则的项,并返回列表
search 找到第一个符合规则的项,并返回一个对象
match 从头开始 找到第一个符合规则的项,并返回一个对象
finditer 找到所有符合规则的项,并返回一个迭代器
compile 预编译一个正则规则,节省多次使用同一个正则的编译时间
sub 替换 默认替换所有,可以使用替换深度参数
subn 替换 返回元组
split 根据正则规则切割,返回列表,默认不保留切掉的内容
分组
分组命名
(?P<组名>正则)
引用分组
(?P=组命)
findall和分组
优先显示分组中的内容
(?:)取消这个分组的优先
split和分组
split会保留正则中分组内匹配到的内容
search和分组
search取分组中的内容
通过索引取 obj.group(1)
通过组名取 obj.group('组名')
r'元字符 量词 惰性符号'
补充
[] [^] 带有特殊意义的元字符到字符组内大部分都会取消它的特殊意义
会取消
[()+*.]
- [(\-)] -的位置决定了它的意义,写在字符组的第一个位置/最后一个位置就表示一个普通的横杠
写在字符组的其他任何位置都表示一个范围
正则指引
找出<h1>123fh</h1><h2>hado</h2>中所有标签内的字符串 爬虫
import re
ret = re.findall('<.*?>(.*?)<.*?>','<h1>123fh</h1><h2>hado</h2>')
print(ret)
找出四则运算表达式中的第一个乘除法
\d*\d|\d/\d
\d+(\.\d+)?[*/]\d(\.\d+)?
\d+(\.\d+)?[*/]-?\d(\.\d+)? # 建议不要把等式前面得-号匹配出来,免得不知道是减号还是负号容易出错
import re
ret = re.search('\d+(\.\d+)?[*/]-?\d(\.\d+)?','2-3*-5/6')
print(ret.group())
检测用户输入的内容是否是一个合法的身份证号 网页的合法输入(手机号码 qq号码 银行卡号 邮箱地址)
'^[1-9]\d{14}(\d{2}[\dx])?$'
import re
inp = input('>>>').strip()
re.match('[1-9]\d{14}(\d{2}[\dx])?$',inp) # 首选
re.search('^[1-9]\d{14}(\d{2}[\dx])?$',inp)
re.findall('^[1-9]\d{14}(\d{2}[\dx])?$',inp)
2.关于作业 计算器
'1*( 2 - 3 /4)' 去空格
'5+(6-1*(2-3/4))+(5-6/3)'
\([^()]+\)得到的结果就是最内层括号内的元素
search
乘法或者除法
1-2*3/4+3*5
\d(\.\d+)?[*/]-?\d+(\.\d+)?
search
加减法
def mul_div(exp):
# '1*2' '1/2' '1.2*2.4' '5.6*7.8888'
pass
return res
def func(exp):
1+2*4/5
把第一个乘法或者除法找出来,然后交给mul_div函数计算得到结果
res = mul_div('2*4')
再用结果来替换1+2*4/5的小算式
循环上面的过程,直到把所有的乘法除法都计算完
1+10-5
如何解决加减法的问题
进阶需求:
处理复杂的符号问题 1-2*4/-5
去括号
3.今日内容
# 网络编程 http://www.cnblogs.com/Eva-J/articles/8244551.html
# 网络基础
# 基于tcp协议和ucp协议的socket
# 解决tcp协议的粘包问题
# 并发问题
# 网络基础
# 未来的web框架的学习 未来的工作场景做铺垫
4.内容详细
# 1.两个运行中的程序如何传递信息?
# 通过文件
# 2.两台机器上的两个运行中的程序如何通信?
# 通过网络
# 网络应用开发架构
# C/S 迅雷 qq 浏览器 飞秋 输入法 百度云 pycharm git VNC 红蜘蛛 各种游戏
# client 客户端
# server 服务端
# B/S 淘宝 邮箱 各种游戏 百度 博客园 知乎 豆瓣 抽屉
# browser 浏览器
# server 服务端
# 统一程序的入口
# B/S和C/S架构的关系
# B/S是特殊的C/S架构
# 网卡 :是一个实际存在在计算机中的硬件
# mac地址 :每一块网卡上都有一个全球唯一的mac地址
# 交换机 :是连接多台机器并帮助通讯的物理设备,只认识mac地址
# 协议 :两台物理设备之间对于要发送的内容,长度,顺序的一些约定
# ip地址
# ipv4协议 位的点分十进制 32位2进制表示
# 0.0.0.0 - 255.255.255.255
# ipv6协议 6位的冒分十六进制 128位2进制表示
# 0:0:0:0:0:0-FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
# 公网ip
# 为什么你的外地朋友的电脑我们访问不了
# 每一个ip地址要想被所有人访问到,那么这个ip地址必须是你申请的
# 内网ip
# 192.168.0.0 - 192.168.255.255
# 172.16.0.0 - 172.31.255.255
# 10.0.0.0 - 10.255.255.255
# 交换机实现的arp协议
# 通过ip地址获取一台机器的mac地址
# 网关ip 一个局域网的网络出口,访问局域网之外的区域都需要经过路由器和网关
# 网段 指的是一个地址段 x.x.x.0 x.x.0.0 x.0.0.0
# ip地址
# 子网掩码 判断两台机器是否在同一个网段内的
# 255.255.255.0 子网掩码
# 11111111.11111111.11111111.00000000
# 192.168.12.87
# 11000000.10101000.00001100.01010111
# 11111111.11111111.11111111.00000000
# 11000000.10101000.00001100.00000000 192.168.12.0
# 192.168.12.7
# 11000000.10101000.00001100.00000111
# 11111111.11111111.11111111.00000000
# 11000000.10101000.00001100.00000000 192.168.12.0
# ip 地址能够确认一台机器
# port 端口
# 0-65535
# 80
# ip + port 确认一台机器上的一个应用