每日总结-day19-网络基础

一、正则表达式re模块

1.转义符号
在有特殊意义或者特殊功能的符号前加\,让他特殊的功能和意义消失
注意:独立的有特殊意义的符号,在[]中,它的特殊意义会自动消失

re_str = r'[+.*]abc\.123[.]23'
print(re.fullmatch(re_str, '+abc.123.23'))

2.re模块
1)compile(正则表达式) - 编译创建正则表达式对象

2)fullmatch(正则表达式, 字符串) - 让正则表达式和整个字符串进行匹配,如果匹配成功,返回匹配对象
如果匹配失败,返回None

result = re.fullmatch(r'(\d{3})([a-z]{3})', '123asd')
print(result)

匹配对象:
a.获取匹配结果:
匹配对象.group() - 获取整个正则表达式获取到的结果
匹配对象.group(N) - 获取第N个分组匹配到的结果

print(result.group())  # 123
print(result.group(2))  # asd

b.获取匹配结果在源字符串中的范围
匹配对象.span()
匹配对象.span(N)

print(result.span())  # (0, 6)
print(result.span(2))  # (3, 6)

c.获取源字符串
源字符串.string

print(result.string)  # 123asd
  1. match(正则表达式,字符串) - 让字符串开头和正则表达式进行匹配,返回值是匹配对象或None
print(re.match(r'\d{3}', '7832as'))  # 
  1. search(正则表达式,字符串) - 在字符串中查找第一个满足正则表达式的子串;返回值是匹配对象或None
print(re.search(r'\d{3}', 'ad2342wqe123'))  # 
  1. findall(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串;返回值是一个列表,列表中的元素是字符串,当存在一个分组的时候,列表只取分组中的内容,当存在两个或两个以上分组的时候,列表将各分组中的内容最为元素存在元组中
print(re.findall(r'\d{3}', 'asd12312asd3421'))  
# ['123', '342']print(re.findall(r'\d+[a-z]{2}', 'as890ds98asd098qwd'))  
# ['890ds', '98as', '098qw']print(re.findall(r'(\d+)[a-z]{2}', 'as890ds98asd098qwd'))  
# ['890', '98', '098']print(re.findall(r'(\d+)([a-z]{2})', 'as890ds98asd098qwd'))  # [('890', 'ds'), ('98', 'as'), ('098', 'qw')]
  1. finditer(正则表达式,字符串) - 获取字符串中所有满足正则表达式的字符串,返回的是迭代器,迭代器中的元素是匹配对象
result = re.finditer(r'(\d+)([a-z]{2})', 'as890ds98asd098qwd')print(list(result))# [, , ]
  1. split(正则表达式,字符串) - 一正则表达式匹配到的子串作为切割点,对字符串进行切割,返回值是列表,列表中的元素是字符串
result = re.split(r'\d+', 'as890ds98asd098qwd123')  
print(result)   # ['as', 'ds', 'asd', 'qwd', '']
  1. sub(正则表达式, 字符串1, 字符串2) - 将字符串2中满足正则表达式的子串全部替换成字符串1
result = re.sub(r'\d+', 'and', 'as890ds98asd098qwd123')print(result)  
# asanddsandasdandqwdand
  1. 参数flags
    以上所有的函数都有一个参数flags,可以加re.I表示匹配的时候忽略大小写,加re.S表示单行匹配(默认多行匹配)多行和单行的主要区别:多行匹配.不能和\n进行匹配,单行.可以和\n匹配
print(re.fullmatch(r'a.b', 'a\nb', flags=re.S)) # 
print(re.fullmatch(r'a.b', 'a\nb'))     # None

二、网络基础-socketServer

1.socket编程
socket又叫套接字
socket编程其实就是用代码来实现进行网络通信的两个端;套接字就是实现通信的两个程序
实现通信的两个端分为服务器金额客户端两种
python通过socket模块来提供套接字编程相关的类和方法,其中socket这个类就是套接字对应的类

2.服务器端的实现
1)创建套接字对象(买电话机)
socket(family = AF_INET, type = SOCK_STREAM)
family - 设置ip类型,AF_INET对应的是ipv4,AF_INET6对应的是ipv6
type - 设置传输类型,SOCK_STREAM对应的是TCP协议,SOCK_DGRAM对应的是UDP协议

server = socket.socket()

2)绑定ip和端口(插电话线)
bind((ip地址, 端口))

ip地址:找到互联网中唯一的一台计算机;赋值Ip地址对应的字符串
端口:区分同一台计算机中不同的服务(程序);赋整数,值的范围是065535;其中01024属于著名端口
同一时间同一个端口只能对应一个服务

server.bind(('10.7.156.69', 12345))

3)开始监听(等电话)
server.listen(512)
print('开始监听。。。')

4)保持通信(保持电话一直可用)

while 1:
    # 5)接受客户端的请求(接电话),返回为这个客户端创建的独立的套接字对象(分机)和客户端的地址
    # 当程序运行到这句代码的时候会停下来,直到有请求为止
    connection, address = server.accept()

    # 6) 接收消息(听别人说)
    # recv(一次性能接受的数据的大小) - 返回接收到的数据,数据类型是二进制
    recv_data = connection.recv(1024)
    print(recv_data.decode(encoding='utf-8'))

    # 7) 发送消息(说给别人听)
    # send(需要发送的数据)
    connection.send('HTTP/1.1 200 OK\r\n\r\n 你好'.encode())
    # 关闭连接
    connection.close()

三、socketClient

# 1.客户端套接字
# 1) 创建套接字对象(买电话)
client = socket.socket()

# 2) 连接服务器(拨号)
client.connect(('10.7.156.52', 12345))

# 3) 发送消息
client.send('服务器你好'.encode())

# 4) 接受消息
re_data = client.recv(1024)
print(re_data.decode(encoding='utf-8'))

# 5) 关闭连接
client.close()

你可能感兴趣的:(每日总结-day19-网络基础)