美文网首页python热爱者
优质资源,python 正则表达式实践 & python

优质资源,python 正则表达式实践 & python

作者: 48e0a32026ae | 来源:发表于2018-09-23 11:52 被阅读1次

正则表达式

应用场景

特定规律字符串的查找替换切割等

邮箱格式、URL、IP等的校验

爬虫项目中,特定内容的提取

使用原则

只要是能够使用字符串函数解决的问题,就不要使用正则

正则的效率较低,还会降低代码的可读性

世界上最难理解的三样东西:医生的处方、道士的神符、码农的正则

提醒:正则是用来写的,不是用来读的;在不知道功能的情况下,不要试图阅读别人的正则。

基本使用

说明:正则的解析处理是由 re 模块完成

相关函数:

match:从开头进行匹配,匹配到就返回正则结果对象,没有就返回None

search:从任意位置匹配,匹配到一次就返回,没有就返回None

import re

# 只从开头匹配,找到返回一个正则结果对象,没有找到返回None

# m = re.match('abc', 'abcsdhasdasjabcweuqo')

# 全部匹配,只要找到就停止并返回

m = re.search('abc', 'sdhabcsdasjabcweuqo')

if m:

# 提取匹配到的内容

print(m.group())

# 获取匹配位置

print(m.span())

findall:全局匹配,返回匹配到的结果列表,没有时返回空列表

# 匹配所有内容,返回匹配结果组成的列表,若没有则返回空列表

f = re.findall('abc', 'qwsdhaslabcsadjlasdoiabcdakls')

if f:

print(f)

print(type(f))

compile:生成正则表达式对象

# 生成正则表达式对象,用于正则匹配

c = re.compile('hello')

# 从开头进行匹配

# m = c.match('hellosdsjldkabc')

# 从任意位置匹配

m = c.search('shdjkhelloaskjdha')

if m:

print(m.group())

# 匹配所有

f = c.findall('helloasjdhakhello')

if f:

print(f)

将正则的匹配分两步完成:先创建正则对象,然后通过对象的match、search、findall方法完成匹配

正则规则

单个字符:

普通字符:简单来说就是一对一的完全匹配

[]:中间的任意一个字符

[a-z]:a~z之间的字符(所有小写字母)

[0-9]:0~9之间的字符(所有数字)

[A-Z0-9]:所有的大写字母和数字

[^abc]:除abc外的所有字符

. :匹配''以外的任意字符

d:所有的数字,等价于[0-9]

D:所有的非数字,等价于[^0-9]

w:所有的数字、字母(中文)、下划线等(就是字)

W:所有的非字字符(w的取反)

s:所有的空白字符(、、、空格等)

S:所有的非空白字符

:词边界匹配(开头、结尾、标点、空格)

B:非词边界匹配

次数控制

*:前面的字符出现任意次

+:前面的字符出现至少一次

?:前面的字符出现至多一次

{m}:指定次数,m表示出现的次数

{m,}:至少指定次数

{m,n}:指定范围内的次数,m到n次之间

{,n}:至多n次,相当于{0,n}

正则的匹配默认都是贪婪的(最大限度的匹配)

边界限定

^:以指定的内容开头

$:以指定的内容结尾

示例

import re

# 以指定的内容开头

# c = re.compile(r'^abc')

# 以指定的内容结尾

c = re.compile(r'kas$')

s = c.search('abcsdhkas')

if s:

print(s.group())

优先级控制

|:表示或,它拥有最低的优先级

():用于表示一个整体,明确的指定优先级

示例:

import re

c = re.compile(r'a(hello|world)b')

s = c.search('aworldb')

if s:

print(s.group())

分组匹配

说明:()不但可以作为一个整体,还可以进行分组匹配

示例1:

import re

c = re.compile(r'(d+)([a-z]+)(d+)')

s = c.search('shd327sjahdajhsd87892ehawksd')

if s:

print(s.group())

# 默认就是全部的匹配内容,等价于上式

print(s.group(0))

# 第一个()匹配到的内容

print(s.group(1))

print(s.group(2))

print(s.group(3))

print(s.span())

print(s.span(0))

print(s.span(1))

print(s.span(2))

print(s.span(3))

示例2:给分组起名字

import re

# 固定匹配

# c = re.compile(r'

w+')

# �表示前面第一个小括号匹配的内容

# c = re.compile(r'<([a-z]+)><([a-z]+)>w+')

# 给()起名字

c = re.compile(r'<(?P[a-z]+)><(?P[a-z]+)>w+')

s = c.search('

百度一下')

if s:

print(s.group())

贪婪匹配

贪婪:最大限度的匹配叫贪婪。正则的匹配默认是贪婪。

非贪婪:只要满足匹配条件,能少匹配就少匹配;通过可以使用'?'进行取消贪婪

示例:

import re

# 取消任意多次的贪婪

# c = re.compile(r'a.*?b')

# 取消至少一次的贪婪

c = re.compile(r'a.+?b')

s = c.search('abdhsadjbsdjabs')

if s:

print(s.group())

匹配模式

说明:所谓模式就是对匹配的原则进行整体的修饰

示例:

import re

# 忽略大小写的匹配

# c = re.compile(r'hello', re.I)

# s = c.search('Hello world')

# 进行多行匹配,默认单行匹配

# c = re.compile(r'^hello', re.M)

# s = c.search('world hello')

# 做为单行处理 或 让 . 能够匹配

c = re.compile(r'

.*?', re.S)

# string = '

hello'

string = '''

hello

'''

s = c.search(string)

if s:

print(s.group())

字符转义

若匹配正则语法中的特定字符都需要进行转义

正则字符串会被处理两次,python中处理一次,re模块会在处理一次

若不想考虑字符的转义问题,可以在书写正则字符串时前面加一个字符'r'

添加'r'之后,在python不会再进行任何转义,只需在与正则语法相关的字符前加''即可让其使用原有意义

网络编程

相关概念

OSI七层模型:开放系统互连参考模型。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

TCP/IP:在OSI七层模型的基础上简化抽象出来的一套网络协议簇,现在得到了广泛使用。

TCP:传输控制协议

有连接的,数据是安全有保障的

传输的速度稍慢,三次握手、四次挥手、数据检查

UDP:用户数据报协议

无连接的,数据是不可靠的

传输的速度比较快

IP地址:唯一的一台计算标识

查看:ipconfig

ping:检查网络连通性

使用:ping IP/域名

端口号:每个应用可以拥有唯一的端口号

范围:0~65535

系统:0~1024,常用的应用所占用

http:80

https:443

smtp:25

ftp:21

ssh:22

mysql:3306

redis:6379

自己:大于1024

网络编程核心:

IP + 端口

库:socket

TCP协议

说明:面向连接、数据可靠(校验重发)、三次握手、四次挥手、传输速度较慢

原理:见 tcp.png

示例:见 01-tcp-http.py

TCP协议的服务器与客户端:见 02-tcp-server.py 与 03-tcp-client.py

UDP协议

说明:面向无连接的、数据不可靠、传输速度较快,适应于对数据要求不严格的情况

原理:见 udp.png

示例:模拟飞秋发送数据,见 04-udp-feiqiu.py

UDP协议的服务器与客户端:见 05-udp-server.y 与 06-udp-client.py

StringIO与BytesIO

说明:这些类型的对象可以与open返回的对象一样操作,但是操作的内存中的数据

方法:getvalue用于获取所有数据

相关文章

  • 优质资源,python 正则表达式实践 & python

    正则表达式 应用场景 特定规律字符串的查找替换切割等 邮箱格式、URL、IP等的校验 爬虫项目中,特定内容的提取 ...

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式

    Python:正则表达式Python:正则表达式

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • Python notes(3/3)

    目录 一,Python 面向对象 二,Python 正则表达式 三,Python CGI编程 四,Python 操...

  • Python-04

    参考 : 庞雪峰Python教程 Github-Python资源大全 Python中文资源大全 一、Python ...

  • Python-01

    Python开始了,哈哈 参考: 庞雪峰Python教程 Github-Python资源大全 Python中文资源...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 自学python(三)利用Anaconda、VSCode搭建编程

    因资源所限,《自学python》系列所有的学习和实践将在win10环境下进行,敬请谅解。 [安装python] 方...

网友评论

    本文标题:优质资源,python 正则表达式实践 & python

    本文链接:https://www.haomeiwen.com/subject/cbwfoftx.html