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) # None11. "^"出现在[]的第一个位置,就表示取反,例如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…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
