Python-正则与简单web服务器

描述

正则表达式

re模块

  • 在 Python中,可以通过使用** re 模块**的正则表达式来匹配字符串

语法

import re


# 使用match方法进行匹配操作
result=re.match(正则表达式,要匹配的字符串)


# 如果上面匹配到数据的话,要以使用group方法来提取数据
result.group()

单个字符匹配规则

字符 功能
. 匹配任意1个字符(除了\\n)
[ ] 匹配 [ ] 中列举的字符
\\d 匹配数字,即 0~9
\\D 匹配非数字
\\s 匹配空白字符,即 空格、tab键
\\S 匹配非空白
\\w 匹配单词字符,即 az 、AZ、0~9、_、中文
\\W 匹配非单词字符

**多个字符匹配规则 **

字符 功能
* 匹配前一个字符出现0次或无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即 至少1次
匹配前一个字符出现0次或1次,即 要么1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次

匹配分组

字符 功能
(ab) 将括号中的字符作为一个分组
\\num 引用分组 num匹配到字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

示例

import re


# 匹配单个字符
str_content="生化危机2"
t1=re.match(r"生化危机\\d",str_content)
print(t1.group())


# 匹配多个字符
str_content="孙悟空的手机是:13388888888"
t1=re.match(r"孙悟空的手机是:\\d{1,11}",str_content)
print(t1.group())


# 分组, 匹配邮箱,126、qq、163邮箱都可以, 邮箱中的 .需要使用 \ 转义
str_content="孙悟空的邮箱是:sunwukong@163.com"
t1=re.match(r"孙悟空的邮箱是:\\w+@(126|163|qq)\\.com",str_content)
print(t1.group())

re模块的高级用法

  • search、findall、sub、split

示例

# search 用法
str_content="孙悟空会72变"
t1=re.search(r"\\d+",str_content)
print(t1.group())
# 输出结果:72


# findall 用法
str_content="孙悟空会72变,猪八戒会36变,二郎神会36变"
t1=re.findall(r"\\d+",str_content)
print(t1)
# 输出结果:['72', '36', '36']


# sub 将匹配到的字符串进行替换
str_content="孙悟空会 36 变"
t1=re.sub(r"\\d+","72",str_content)
print(t1)
# 输出结果:孙悟空会 72 变


# split 根据匹配切割字符串,返回一个字符列表
str_content="孙悟空,猪八戒,沙和尚"
t1=re.split(r",",str_content)
print(t1)
# 输出结果:['孙悟空', '猪八戒', '沙和尚']

注:Python 中字符串前面加上 r 表示原生字符串

  • 与大多数编程语言相同,正则表达式里使用 "" 作为转义字符,这就可能会有反斜杠困扰。 如果你需要匹配的文本中有两个 "" ,那么使用正则表达式里面就需要使用四个 "" (即 "\\")
str_content="c:\\\\a"
# 不使用 r
t1=re.match("c:\\\\\\\\a",str_content)
print(t1.group())


# 使用 r
t1=re.match(r"c:\\\\a",str_content)
print(t1.group())

**输出结果

**

字符串

web服务器

http协议

  • 在Web应用中,服务器把网页传递给浏览器,实际上就是把网页的html代码发送给浏览器,让浏览器显示出来,而浏览器和服务器之间的传输协议是HTTP
    • HTML 是一种用来定义网页的文本,编写网页的代码就是html语言
    • **HTTP **是在网络上传输html的协议,用于浏览器和服务器之间的通信

访问百度的示例

字符串

简单web服务器

import socket




def main():
    # 创建tcp套接字
    so_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 绑定端口
    so_server.bind(("",33333))
    # 监听套接字
    so_server.listen(128)
    # 等待新客户端接连
    new_socket,client_addr=so_server.accept()


    #接收浏览器发过来的请求
    request=new_socket.recv(1024)
    print(request)


    # 发送给浏览器数据
    content="HTTP/ 1.2 xxx\\r\\n"
    content+='\\r\\n'
    content+="hello world!!"
    new_socket.send(content.encode("utf-8"))




    # 关闭
    new_socket.close()
    so_server.close()


if __name__ == '__main__':
    main()

请求示例

字符串

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分