Python(黄金时代)——正则与简单web服务器

Posted 程序猿知秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python(黄金时代)——正则与简单web服务器相关的知识,希望对你有一定的参考价值。

正则表达式

re模块

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

语法

import re

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

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

单个字符匹配规则

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

多个字符匹配规则 

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

匹配分组

字符功能
|匹配左右任意一个表达式
(ab)将括号中的字符作为一个分组
\\num引用分组 num匹配到字符串
(?P<name>)分组起别名
(?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"孙悟空的手机是:\\d1,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
    • HTTP 是在网络上传输html的协议,用于浏览器和服务器之间的通信

    • HTML 是一种用来定义网页的文本,编写网页的代码就是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()

请求示例

 程序猿与投资生活实录已改名为  程序猿知秋,WX同款,欢迎关注!

使用PuTTy在CentOS下安装web.py与简单的文件传输

两周前,出于帮朋友忙的目的,尝试了一下微信公众号的菜单自定义与自动回复功能的实现,成了。

两周后,需要将代码转移至朋友新购的服务器上,发现基本操作全忘记了,麻瓜所以记一笔,希望也能对大家也有帮助。

腾讯云买的服务器,系统为CentOS 7.2 64位,自带python2.75。

第一步,安装web.py

  网上推荐的用这个 easy install 下载管理 python 的包,所以先安装 easy install:

    yum install python-setuptools

  安装完成,输入:

    easy_install web.py

第二步,安装libxml2, libxslt, lxml python

    yum install + 名称

    我试过后发现libxml2是已经存在的。

第三步,测试web.py是否安装成功

    附上教程里的测试用main.py。

import web

urls = (
    \'/wx\', \'Handle\',
)

class Handle(object):
    def GET(self):
        return "hello, this is a test"

if __name__ == \'__main__\':
    app = web.application(urls, globals())
    app.run()

    在终端输入sudo python main.py 80 服务开启了,在浏览器中输入ip+/wx,网页输出hello, this is a test

    表示测试成功,运行正常。

第四步,完成

    需要注意的是,Putty的Session关闭会导致服务停止,百度得不挂断运行命令, nohup :

    sudo nohup python main.py 80 这样会生成一个nohup.out文件,记录Console的内容。

 PS:因为不熟悉Linux,更不熟悉SSH,涉及到文件转移时,选择了简单的psftp.exe。

    open in + ip ->login 

    put + filename 向服务器上传文件,默认到root目录。

    get + filename 从服务器上下载,cd指令进入目录为所欲为。

附图一张(一个一个复制,惨!),下载地址一个(putty,psftp一系列exe)。

 

下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

以上是关于Python(黄金时代)——正则与简单web服务器的主要内容,如果未能解决你的问题,请参考以下文章

[转]Python web 简单服务器的搭建与运行

Python 正则表达式与JSON

大数据应用于web

Corba python 与 web 服务 java 的集成

web集群时代

NLP将迎来黄金十年,7个案例带你入门(附Python代码)