1.8 正则表达式
正则表示式是用来匹配与查找字符串的,从网上爬取数据不可避免的会用到正则表达式。 Python 的表达式要先引入 re 模块,正则表达式以 r 引导。
Re库主要功能函数
函数 | 说明 |
re.search() | 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 |
re.match() | 从一个字符串的开始位置匹配正则表达式,返回match对象 |
re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是math对象 |
re.sub() | 在一个字符串中替换所有匹配正则表示式的子串,返回替换后的字符串 |
1. 字符"\d"匹配0-9之间的一个数值
importre
reg=r"\d"
a=re.search(reg, "abc123cd")
print(a) # <re.Match object; span=(3, 4), match='1'>
b1=re.match(reg, "abc123cd")
print(b1) # None
b2=re.match(reg, "12abc123cd")
print(b2) # <re.Match object; span=(0, 1), match='1'>
c=re.findall(reg, "abc123cd4")
print(c) # ['1', '2', '3', '4']
d=re.split(reg, "abc123cd")
print(d) # ['abc', '', '', 'cd']
e=re.finditer(reg, "abc123cd")
formathine:print(math.group(), end=" ") # 1 2 3
print()
f=re.sub(reg, "*", "abc123cd4")
print(f) # abc***cd*
2. 字符"+"重复前面一个匹配字符 一次或多次 >=1
importre
reg=r"b\d+"
a=re.search(reg, "a12b123c")
print(a) # <re.Match object; span=(3, 7), match='b123'>
注意:r"b\d+" 第一个字符要匹配 "b" ,后面是连续的多个数字,因此是"b123"。
3. 字符"*"重复前面一个匹配字符零次或多次 >=0
importre
reg=r"ab+"
a=re.search(reg, "acabc")
print(a) # <re.Match object; span=(2, 4), match='ab'>
reg=r"ab*"
a=re.search(reg, "acabc")
print(a) # <re.Match object; span=(0, 1), match='a'>
4. 字符"?"重复前面一个匹配字符零次或一次 0 or 1
importre
reg=r"ab?"
m=re.search(reg, "abbcabc")
print(m) # <re.Match object; span=(0, 2), match='ab'>
问题:匹配结果为什么不是<re.Match object; span=(0, 1), match='a'>
原因:优先级:一次 > 零次
5. 字符"."代表任何一个字符,但是没有特别声明时不代表字符"\n"
importre
s="xaxby"
a=re.search(r"a.b", s)
print(a) # <re.Match object; span=(1, 4), match='axb'>
6. "|"代表把左右分成两个部分
importre
s="xaabababy"
a=re.search(r"ab|ba", s)
print(a) # <re.Match object; span=(2, 4), match='ab'>
7. 特殊字符使用反斜线""引导,例如"\r"、"\n"、"\t"、"\"分别表示 回车、换行符、制表符与反斜线本身
importre
reg=r"a\nb?"
a=re.search(reg, "ca\nbcabc")
print(a) # <re.Match object; span=(1, 4), match='a\nb'>
8. 字符"\b"表示单词结尾,单词结尾包括各种空白字符或者字符串结尾
importre
reg=r"car\b"
a=re.search(reg, "The car is black")
print(a) # <re.Match object; span=(4, 7), match='car'>
9. "[]"中的字符表示任意选择一个,如果字符是 ASCII 码中连续的一组,那么可以使用"-"符号连接,例如[0-9]表示0-9的其中一个数字,[A-Z]表示A-Z的其中一个大写字符,[0-9A-Z]表示0-9的其中一个数字或者是A-Z的其中一个大写字符
import re
reg = r"x[0-9]y"
a = re.search(reg, "xyx2y")
print(a) # <re.Match object; span=(2, 5), match='x2y'>
10. "^"匹配字符串开头位置
import re
reg = r"^ab" # 以"ab"开头
a = re.search(reg,"cabcab")
print(a) # None
11. "^"出现在[]的第一个位置,就表示取反,例如ab0-9表示不是a、b也不是0-9的数字
import re
reg=r"x[^ab0-9]y"
a = re.search(reg,"xayx2yxcy")
print(a) # <re.Match object; span=(6, 9), match='xcy'>
12. "\s"匹配任何空白字符,等价"[\r\n\x20\t\f\v]"
import re
s = "la ba\tbxy"
a = re.search(r"a\sb", s)
print(a) # <re.Match object; span=(1, 4), match='a b'>
13. "\w"匹配包括下划线内的单词字符,等价于"[a-zA-Z0-9_]"
import re
reg = r"\w+"
a = re.search(reg, "Python is easy")
print(a) # <re.Match object; span=(0, 6), match='Python'>
14."$"字符匹配字符串的结尾位置
import re
reg = r"ab$"
a = re.search(reg, "abcab")
print(a) # <re.Match object; span=(3, 5), match='ab'>
15. 使用括号(...)可以把(...)看成一个整体,经常于"+"、"*"、"?"等符号连续使用,对(...)部分进行重复
import re
reg = r"(ab)+"
a = re.search(reg, "ababcab")
print(a) # <re.Match object; span=(0, 4), match='abab'>
search函数虽然只返回第一次匹配的结果,但是只要连续使用 search 函数就可以找到字符串中全部匹配的字符串
应用举例
例:匹配找出英文句子中所有单词
importre
s="I am testing search function"
reg=r"[A-Za-z]+\b"
a=re.search(reg, s)
whilea!=None:start=a.start()end=a.end()print(s[start:end])s=s[end:]a=re.search(reg, s)

经典正则表达式
表达式 | 表示的字符串 |
^[A-Za-z]+$ | 由26个字母组成的字符串 |
^[A-Za-z0-9]+$ | 由26个字母和数字组成的字符串 |
^-? \d+$ | 整数形式的字符串(^-?表示±号) |
[1-9]\d{5} | 中国境内邮政编码,6位 |
[\u4e00-\u9fa5] | 匹配中文字符 |
\d{3}- \d{8}|\d{4}-\d{7} | 国内电话号码,010-68913536 |
\w+@(\w+.)+\w+ | 邮箱 |
相关文章:

1.8 正则表达式
正则表示式是用来匹配与查找字符串的,从网上爬取数据不可避免的会用到正则表达式。 Python 的表达式要先引入 re 模块,正则表达式以 r 引导。Re库主要功能函数函数说明re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象…...

Postgresql 根据单列或几列分组去重row_number() over() partition by
Postgresql 根据单列或几列分组去重row_number() over() partition by 一般用于单列或者几列需要去重后进行计算值的 count(distinct(eid)) 可以 比如有个例子,需要根据名称,城市去筛选覆盖的道路长度,以月因为建立了唯一索引是ok的&#…...

基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(PythonMatlab实现)
💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🎉作者研究:🏅🏅🏅主要研究方向是电力系统和智能算法、机器学…...

Selenium常用API详解,从入门到进阶(全套)
目录 1、打开页面 2、查找页面元素 3、输入文本 4、点击操作 5、提交操作 6、清除文本 7、获取文本、属性 8、获取页面的标题和URL 9、窗口 9.1、设置窗口大小 9.2、窗口切换 9.2.1、为什么需要窗口切换? 9.2.2、获取句柄的方式 9.2.3、切换句柄 10、…...

自从学会了Python,我实现了壁纸自由(6)
小朋友们好,大朋友们好!我是猫妹!哈哈哈,又到周末啦!这周过得怎么样?马上就要开学了,寒假作业早已写好了吧?开学让人兴奋,上了很久网课都要吐啦!开学也让人有…...
Ruby 发送邮件 - SMTP
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start: new 方法有两个参数&am…...

Python爱心代码
前言 Python漂浮爱心,具体源码见:Python动态爱心代码_爱心代码-Python文档类资源-CSDN下载 爱心类 class Heart(): #每个爱心(爱心类) def __init__(self): self.r ra.randint(10,15) #爱心的半径 …...
【二分查找法及其应用】
文章目录一. 前提二. 基本思路三. 代码实现四. 封装在STL中的二分查找算法五. 浮点数二分一. 前提 待查找的序列是有序的;待查找的 a 采取顺序存储结构。 二. 基本思路 设在升序序列 a [ low…high ] 查找的 k , 首先找中间值 mid a [ ( lowhigh )/2 …...

Android 进阶——Framework核心 之Binder Java成员类详解(三)
文章大纲引言一、Binder Java家族核心成员关系图二、Binder Java家族核心成员源码概述1、android.os.IBinder1.1、boolean transact(int code, Parcel data, Parcel reply, int flags) send a call to an IBinder object1.2、String getInterfaceDescriptor()1.3、boolean ping…...

Maven
Maven 1.什么是Maven 官方网站 https://maven.apache.org/ Maven是一款服务于Java平台的自动化构建工具,它可以帮助我们更方便的对项目进行构建、管理项目jar包 ,包括: bulid 项目,切换 jar 版本,添加 jar, 删除 jar 包等 1.…...

1947抓住那头牛(队列 广度优先搜索)
目录 题目描述 解析 解题思路 代码部分 代码部分 运行结果 看看len数组中各个位置的标记值 为什么这样做一定是最短路径: 题目描述 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<N<100000)&…...
基于linux5.15.5的IMX 参考手册 ---21
基于linux5.15.5的IMX 参考手册 — 21 10.5.2高清多媒体接口(HDMI)和显示端口(DP)概述 10.5.2.1测试名称 •mxc_cec_test.out 10.5.2.1.1位置 /unit_tests/HDMI/ 10.5.2.1.2功能 验证HDMI CEC功能并向HDMI接收器发送断电命令。 1…...

Android Dalvik虚拟机 堆初始化流程
前言 上篇文章介绍了dalvik虚拟机启动流程,在dalvik虚拟机启动时调用了dvmGcStartup来启动堆。 本文介绍我们在日常开发使用Java时的堆创建流程。 Dalvik堆介绍 Dalvik虚拟机中,堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中ÿ…...
0讲(补)——开发前必备基本常识
前言 专栏内容持续补充更新,目前正在进行优惠活动 目录 前言 一、函数的声明和定义 二、预编译 三、串口打印中的printf函数的使用...

JS学习笔记
1.WebAPIs简介导读Web APIs 和JS 基础关联性JS 基础阶段以及 Web APIs 阶段JS基础学习 ECMAScript 基础语法为后面作铺垫,Web APIs 是JS 的应用,大量使用JS基础语法做交互效果①JS 基础阶段我们学习的是ECMAScript 标准规定的基本语法要求同学们掌握JS 基…...
linux005之用户、组管理
linux用户管理简介: 任何使用linux系统的用户,都必须使用一个合法的账号和密码,账号和密码一般都是超级管理员创建,当然普通用户也可以创建用户,前提是必须拥有创建用户权限。 root是linux系统中默认创建的超级用户 创…...

列线图工具_Nomogram
定义 列线图是一种相对传统的分析方法,用于展示自变量和因变量的线性关系,及其特征的重要程度。 现在用SHAP,和机器学习库中的 Feature importance 工具可以实现类似甚至更好效果。不过很多传统的研究领域比较认这种方法。 列线图工具建立在…...

【C++】类和对象(一)
目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认…...

Python获取搜索引擎结果
前言 想快速获取各个高校的博士招生网站,于是通过python先获取出有可能包含高校博士招生网站的URL,然后通过人为筛选得到了想要的招生网站(注意,并非直接爬取,是间接获取的)。 整理了一份网站名单&#x…...

2.4.8 PCIe——物理逻辑层——REFCLK
一、概述 pcie的参考时钟由板级输入,提供给IP内PHY层的PLL使用,由PLL产生core_clk和pipe_clk。 二、REFCLK产生方式 Serdes 所用时钟由 PHY 模块内的PLL生成,PLL的参考时钟可以由common clock(外部背板提供)、separ…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...