Python高级语法与正则表达式
Python提供了 with 语句的写法,既简单又安全。
文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
# 1、以写的方式打开文件
with open('1.txt', 'w') as f:# 2、读取文件内容f.write('hello world')
生成器的创建方式
生成器推导式
与列表推导式类似,只不过生成器推导式使用小括号 。
# 创建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)# next获取生成器下一个值
# value = next(my_generator)
# print(value)# 遍历生成器
for value in my_generator:print(value)
next 函数获取生成器中的下一个值
for 循环遍历生成器中的每一个值
yield生成器
yield 关键字生成器的特征:在def函数中具有yield关键字
def generator(n):for i in range(n):print('开始生成...')yield iprint('完成一次...')g = generator(5)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g)) -----> 正常
print(next(g)) -----> 报错
Traceback (most recent call last):File "/Users/cndws/PycharmProjects/pythonProject/demo.py", line 14, in <module>print(next(g))
StopIteration
def generator(n):for i in range(n):print('开始生成...')yield iprint('完成一次...')g = generator(5)
for i in g:print(i)
开始生成...
0
完成一次...
开始生成...
1
完成一次...
开始生成...
2
完成一次...
开始生成...
3
完成一次...
开始生成...
4
完成一次...
注意点:
① 代码执行到 yield 会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
② 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常
③ while 循环内部没有处理异常操作,需要手动添加处理异常操作
④ for 循环内部自动处理了停止迭代异常
yield关键字和return关键字
如果不太好理解yield
,可以先把yield
当作return
,他们都在函数中使用,并履行着返回某种结果的职责。
这两者的区别是:
有return
的函数直接返回所有结果,程序终止不再运行,并销毁局部变量;
而有yield
的函数则返回一个可迭代的 generator(生成器)对象,可以使用for循环或者调用next()方法遍历生成器对象来提取结果。
def example():x = 1y = 10while x < y:yield xx += 1example = example()
print(example)
yield与斐波那契数列
数学中有个著名的斐波拉契数列)
要求:数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:
例子:1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们使用生成器来实现这个斐波那契数列,每次取值都通过算法来生成下一个数据,生成器每次调用只生成一个数据,可以节省大量的内存。
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b # 使用 yield# print b a, b = b, a + b n = n + 1for n in fib(5): print n
什么是正则表达式
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
模式:一种特定的字符串模式,这个模式是通过一些特殊的符号组成的。 某种:也可以理解为是一种模糊匹配。
精准匹配:select * from blog where title='python';
模糊匹配:select * from blog where title like ‘%python%’;
正则表达式并不是Python所特有的,在Java、PHP、Go以及JavaScript等语言中都是支持正则表达式的。
正则表达式的功能
① 数据验证(表单验证、如手机、邮箱、IP地址)
② 数据检索(数据检索、数据抓取)
③ 数据隐藏(1356235 王先生)
④ 数据过滤(论坛敏感关键词过滤)
什么是re模块
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个re模块
# 第一步:导入re模块
import re
# 第二步:使用match方法进行匹配操作
result = re.match(pattern正则表达式, string要匹配的字符串, flags=0)
# 第三步:如果数据匹配成功,使用group方法来提取数据
result.group()
match函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
匹配成功re.match方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配数据。
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配,这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9_],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 "ç"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | VERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释,例如写一个匹配邮箱的正则表达式。该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
re模块的相关方法
re.match(pattern, string, flags=0)
-
从字符串的起始位置匹配,如果匹配成功则返回匹配内容, 否则返回None
☆ re.findall(pattern, string, flags=0)
-
扫描整个串,返回所有与pattern匹配的列表
-
注意: 如果pattern中有分组则返回与分组匹配的列表
-
举例:
re.findall("\d","chuan1zhi2") >> ["1","2"]
☆ re.finditer(pattern, string, flags)
-
功能与上面findall一样,不过返回的时迭代器
参数说明:
-
pattern : 模式字符串。
-
repl : 替换的字符串,也可为一个函数。
-
string : 要被查找替换的原始字符串。
-
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
-
flags: 匹配方式:
-
re.I 使匹配对大小写不敏感,I代表Ignore忽略大小写
-
re.S 使 . 匹配包括换行在内的所有字符
-
re.M 多行模式,会影响^,$
-
案例1:查找一个字符串中是否具有数字“8”
import reresult = re.findall('8', '13566128753')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')
案例2:查找一个字符串中是否具有数字
import reresult = re.findall('\d', 'a1b2c3d4f5')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')
案例3:查找一个字符串中是否具有非数字
import reresult = re.findall('\D', 'a1b2c3d4f5')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')
正则表达式编写:查什么、查多少、从哪查
1、查什么
代码 | 功能 |
---|---|
.(英文点号) | 匹配任意1个字符(除了\n) |
[ ] | 匹配[ ]中列举的某个字符,专业名词 => 字符簇 |
[^指定字符] | 匹配除了指定字符以外的其他某个字符,^专业名词 => 托字节 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即 空格,tab键 |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_ |
\W | 匹配特殊字符,即非字母、非数字、非下划线 |
字符簇常见写法:
① [abcdefg] 代表匹配abcdefg字符中的任意某个字符(1个)
② [aeiou] 代表匹配a、e、i、o、u五个字符中的任意某个字符
③ [a-z] 代表匹配a-z之间26个字符中的任意某个
④ [A-Z] 代表匹配A-Z之间26个字符中的任意某个
⑤ [0-9] 代表匹配0-9之间10个字符中的任意某个
⑥ [0-9a-zA-Z] 代表匹配0-9之间、a-z之间、A-Z之间的任意某个字符
字符簇 + 托字节结合代表取反的含义:
① [^aeiou] 代表匹配除了a、e、i、o、u以外的任意某个字符
② [^a-z] 代表匹配除了a-z以外的任意某个字符
\d 等价于 [0-9], 代表匹配0-9之间的任意数字
\D 等价于 [^0-9],代表匹配非数字字符,只能匹配1个
2、查多少
代码 | 功能 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无(0到多) |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次(1到多) |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有(0或1) |
{m} | 匹配前一个字符出现m次,匹配手机号码\d{11} |
{m,} | 匹配前一个字符至少出现m次,\w{3,},代表前面这个字符最少要出现3次,最多可以是无限次 |
{m,n} | 匹配前一个字符出现从m到n次,\w{6,10},代表前面这个字符出现6到10次 |
基本语法:
正则匹配字符.或\w或\S + 跟查多少
如\w{6, 10}
如.*,匹配前面的字符出现0次或多次
3、从哪查
代码 | 功能 |
---|---|
^ | 匹配以某个字符串开头 |
$ | 匹配以某个字符串结尾 |
正则工具箱 :
正则表达式代码生成工具 等
相关文章:

Python高级语法与正则表达式
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。 # 1、以写的方式打开文件 with open(1.txt, w) as f:# 2、读取文件内容f.write(hello world) 生成器的创建方…...

【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解🌏题目描述&a…...

Python如何将图片转换成字符
PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库,支持图像的存储、显示和处理,几乎可以处理所有图片格式,如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…...

国家开放大学形成性考核 统一资料 参考试题
试卷代号:1174 水工钢筋混凝土结构(本)参考试题 一、选择题(每小题2分,共20分,在所列备选项中,选1项正确的或最好的作为答案,将选项号填入各题的括号中) 1.钢筋混凝土结…...

4.7 【共享源】流的生产者(二)
七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…...

流量录制回放工具在自动化测试领域应用探索
引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…...

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Example …...

Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录
学习目标: Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 :最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1,下面会说为啥这么选。 学习内容: 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…...

场景切割CVPr2022 SceneSegmentation
目录 算法介绍 无监督训练原理 源码地址: lstm模块 bilstm opencv场景分割 加阈值:...

Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
如果你的项目使用了SpringCloud微服务技术,那么你就可以使用Feign来作为http客户端来调用远程的http服务。当然,如果你不想使用Feign作为http客户端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。 那么,为…...

[node] Node.js的文件系统
[node] Node.js的文件系统 文件系统的使用异步和同步input.txt示例 常用方法打开文件语法示例 获取文件信息语法示例 写入文件语法示例 读取文件语法示例 关闭文件语法示例 截取文件语法示例 删除文件语法示例 创建目录语法示例 读取目录语法示例 删除目录语法示例 文件模块方法…...

【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch、Zookeeper、Kafka、NoSQL等各类软件
实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,…...

CJson 使用 - 解析Object结构
简介 准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧步骤 下载 git clone https://github.com/DaveGamble/cJSON 或者直接压缩包下载也行, 毕竟国内有时候下载不下来Qt 中使用cJson 在下载的cJson 目录中加入cJson.pri, 内容如下 INCLUDEPATH …...

MySQL8主主搭建
-- mysql8 主主搭建 mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz 主1 : 192.168.2.160 主2 : 192.168.2.161 --解压mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz为mysql8 -- 初始化mysql8 (略) -- 参数192.168.2.160 [root…...

使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程
2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪🐖。 教程 打开pycharm之后,依次点击File->Settings->Tools->External Tools,进入如下界面: 1、配置快捷打开Qt Designer 点击号&…...

React 路由跳转
1. push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址, 就像上图一样,我们每次返…...

【MySQL】数据处理:从SQL批量删除报错到Python优雅解决
一、背景 MySQL数据库表中有一批重复的脏数据,为不影响正常业务,需要进行批量删除。 二、SQL批量删除 首先想到的是编写SQL语句来批量删除:删除身份证号为51****59且ID不为5的全部数据(保留ID为5的那一条数据) DELETE FROM test_table WHERE id IN ( SELECT i…...

Rust 软件测试
Rust 第18节 软件测试 测试已写的函数 在创建每一个lib crate时,rust都会自动生产一个测试 mod;名字为tests; tests mod 被属性 #[cfg(test)] 修饰,用于测试; 在mod 内,需要在函数头上加属性 #[test]进行修饰,让其变为…...

win11下配置visual studio 2022+PCL1.13.1
第一部分:visual studio2022 安装 vs官网网址如下:https://visualstudio.microsoft.com/zh-hans/vs/ 第一步:我们打开官网链接,按如下操作点击下载免费版本的exe文件 第二步:打开下载目录下的安装文件进行安装&#…...

智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.…...

【分享】4个方法打开PDF文件
PDF是很多人工作中经常使用的电子文档格式,但是可能有些刚接触的小伙伴不知道用什么工具来打开PDF文件,今天小编就来分享一下4种常用的工具。 1. 使用浏览器 只要有电脑基本都会安装一到两款浏览器,其实浏览器也可以用来打开PDF文件。 只需…...

React 调试
React 调试 console 调试 console.log console.info console.warn console.error console.time() & console.timeEnd() console.count() debugger调试 chrome断点调试 chrome条件断点 HTML节点复制 选中节点,使用 $0复制 JavaScript对象复制 copy…...

List 流的使用
摘要 本文将介绍在 Java 1.8 中对 List 进行流操作的使用方法。引入的 java.util.stream 包为开发者提供了一种更为便捷和强大的方式来处理集合数据。通过使用流,我们能够以声明性的方式进行集合操作,减少了样板代码,提高了代码的可读性和可…...

设计模式:单例模式(使用c++分别实现饿汉式单例、带双重检查锁定机制的懒汉式单例以及IoDH技术的单例)
单例模式 引言正文1. 饿汉式单例2. 带双重检查锁定机制的懒汉式单例3. IoDH技术的单例 结论优点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 缺点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 引言 在软件开发中,单例模式是一种很常用的设…...

[编程相关]正则表达式Regex语法
--目录-- 0. 前言1. 正则语法2. 正则搜索语法(1)字符集 Character_Classes(2)锚定符 Anchors(3)计数 Quantifiers(4)分组与索引 Group_And_Reference(5)周围 …...

axios实例配置和使用
一.vite项目中引入axios 1.1.安装axios pnpm add axios --save 二.配置axios实例 2.1实例配置 import axios from ‘axios’ import router from ‘/router’ const instance axios.create({ baseURL:“http://127.0.0.1:8080”, timeout:10*1000, //最长响应时间 }) instan…...

uni-app 工程目录结构介绍
锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...

YOLOv8改进 | 主干篇 | 利用SENetV2改进网络结构 (全网首发改进)
一、本文介绍 本文给大家带来的改进机制是SENetV2,其是2023.11月的最新机制(所以大家想要发论文的可以在上面下点功夫),其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何…...

TUP实现一对一聊天
package TCP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * 发送消息线程 */ class Send ext…...

Kafka设计原理详解
Kafka核心总控制器 (Controller) 在Kafka集群中,通常会有一个或多个broker,其中一个会被选举为控制器 (Kafka Controller),其主要职责是管理整个集群中所有分区和副本的状态。具体来说: 当某个分区的leader副本出现故障时&#…...