当前位置: 首页 > news >正文

Python正则表达式中的分组

表达式中的分组

它是可以通过" () “来进行分组,更专业的表达就是捕获组,每个完整的” () “可以分为一组,同时,” () “中还可以嵌套” () ",即组之间还可以存在更小的组

概念

1、当我们在一个正则表达式中使用一个括号的话,就可以将一个需要进行匹配的字符串进行分组,将我们匹配的字符串进行分离处理。一般要分多组的话,左括号从左到右从1开始编号。

2、我们也可以简单的使用正则表达式,在正则表达式中还可以对分组自身进行引用。分组简化正则表达式,分组的右侧可以通过分组的编号引用分组匹配的子串。还可以将分组看成是一个整体,在分组的后面可以加量词,这个量词的作用域就是整个分组

import re
m = "(([1-9])\d*)([a-z]{2})"
r = re.match(m,"2246pq")
if r !=None:print(r.groups())  # >>('2246', '3', 'pq')print(r.group(0))  # >>2246pqprint(r.group(1))  # >>2246print(r.group(2))  # >>3print(r.group(3))  # >>pq
# 导入re模块
import re
​
tel = "0755-98776754"
​
# 定义正则表达式
pattern = "(\\d{4})-(\\d{8})"
result = re.search(pattern, tel)
print(result)    # <re.Match object; span=(0, 13), match='0755-98776754'>
print(result.group())    # 0755-98776754
print(result.group(1))    # 0755
print(result.group(2))    # 98776754
print(result.groups())    # ('0755', '98776754')

其他功能函数

  1. \:表示转义字符,让正则表达式中的字符失去原有的意义
  2. .:表示匹配除了换行之外的任意字符,.就表示一个普通的符号,而不是正则表达式中的.
  3. |:表示或者,正则表达式1|正则表达式2|正则表达式3,只要满足其中一个正则表达式即可
# 导入re模块
import reprint(re.search("goog\\.le", "goog.le"))    # <re.Match object; span=(0, 7), match='goog.le'>
print(re.search("cd|ef|mn", "133cd987"))    # <re.Match object; span=(3, 5), match='cd'>
print(re.search("cd|ef|mn", "133mn987"))    # <re.Match object; span=(3, 5), match='mn'>

re.compile() 表示编译正则表达式,用于提高正则匹配的效率

# 导入re模块
import restr = "010-98766789"
# 定义正则表达式,使用re.compile() 进行编译
pattern = re.compile("(\\d{3})-(\\d{8})")
print(pattern.findall(str))    # [('010', '98766789')]

re.split() 使用指定的正则表达式切割

# 导入re模块
import reprint(re.split("\\d", "hello123world987welcome999"))    # ['hello', '', '', 'world', '', '', 'welcome', '', '', '']

re.sub() 或者 re.subn() 使用指定的符号替换内容,re.subn() 会现实替换的次数,re.sub不会显示

# 导入re模块
import restr1 = "今天 天气 好晴朗,这样的 天气适合出去 游玩......"
print(re.sub("\\s+", "+++", str1))    # 今天+++天气+++好晴朗,这样的+++天气适合出去+++游玩......
print(re.subn("\\s+", "+++", str1))    # ('今天+++天气+++好晴朗,这样的+++天气适合出去+++游玩......', 4)

分组–可以让我们从文本内容中提取指定模式的部分内容

通过group()和groups()来获取分组的内容

分组命名

命名分组就是给具有默认分组编号的组另外再给一个别名。命名分组的语法格式如下
(?P正则表达式)#name是一个合法的标识符
提取字符串中的ip地址

>>> s = "ip='230.192.168.78',version='1.0.0'"
>>> re.search(r"ip='(?P<ip>\d+\.\d+\.\d+\.\d+).*", s)
>>> res.group('ip')#通过命名分组引用分组
'230.192.168.78'

分组引用

分组的后向引用,当我们想要在正则表达式中引用前面的分组时,可以通过"\数字"的方式或者通过命名分组"(?P=name)"进行引用。使用数字时,如\1表示引用第一个分组,\2引用第二个分组…\n表示引用第n个分组

后向引用

#通过命名分组进行后向引用
>>> re.search(r'(?P<name>go)\s+(?P=name)\s+(?P=name)', 'go go go').group('name')
'go'
#通过默认分组编号进行后向引用
>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()
'go go go'

交换字符串的位置

>>> s = 'abc.xyz'
>>> re.sub(r'(.*)\.(.*)', r'\2.\1', s)
'xyz.abc'

前向肯定断言、后向肯定断言

前向肯定断言的语法:(?=pattern)
后向肯定断言的语法:(?<=pattern)
需要注意的是,如果在匹配的过程中,需要同时用到前向肯定断言和后向肯定断言,那么必须将后向肯定断言写在正则语句的前面,前向肯定断言写在正则语句的后面,表示后向肯定模式之后,前行肯定模式之前。
如:获取c语言代码中的注释内容

>>> s1='''char *a="hello world"; char b='c'; /* this is comment */ int c=1; /* t
his is multiline comment */'''
>>> re.findall( r'(?<=/\*).+?(?=\*/)' , s1 ,re.M|re.S)
[' this is comment ', ' this is multiline comment ']

(?<=/)这个是后向肯定断言,表示“/”之后。(?=/)这个为前向肯定断言,表示“/”之前,这两合并起来就是一个区间了,所以后向肯定断言放在前向肯定断言前面
前向否定断言、后向否定断言
前向否定断言语法:(?!pattern)
后向否定断言语法:(?<!pattern)

#提取不是.txt结尾的文件
f1 = 'aaa.txt'
re.findall(r'.*\..*$(?<!txt$)',f1)
[]#提取不以数字开头的文件
re.findall(r'^(?!\d+).*','1txt.txt')
[]#提取不以数字开头不以py结尾的文件
re.findall(r'^(?!\d+).+?\..*$(?<!py$)','test.py')
[]re.findall(r'^(?!\d+).+?\..*$(?<!py$)','test.txt')
['test.txt']

相关文章:

Python正则表达式中的分组

表达式中的分组 它是可以通过" () “来进行分组&#xff0c;更专业的表达就是捕获组&#xff0c;每个完整的” () “可以分为一组&#xff0c;同时&#xff0c;” () “中还可以嵌套” () "&#xff0c;即组之间还可以存在更小的组 概念 1、当我们在一个正则表达式…...

openstack设置IP直接登录,不需要加dashboard后缀

openstack 实验环境&#xff0c;openstack-t版&#xff0c;centos2009 修改配置文件 [rootcontroller ~]# vim /WEBROOT /etc/openstack-dashboard/local_settings #将dashboard去掉 WEBROOT /dashboard/ #改为 WEBROOT /[rootcontroller ~]# vim /etc/httpd/conf.d/openst…...

PHP宠物店萌宠小程序系统源码

&#x1f43e;萌宠生活新方式&#x1f43e; &#x1f3e1;【一键直达萌宠世界】 你是否也梦想着拥有一家随时能“云撸猫”、“云吸狗”的神奇小店&#xff1f;现在&#xff0c;“宠物店萌宠小程序”就是你的秘密花园&#xff01;&#x1f31f;只需轻轻一点&#xff0c;就能瞬…...

nginx负载均衡实例

实现效果 浏览器输入地址http://nginx服务器ip(:80)/edu/a.html&#xff0c;实现负债均衡效果&#xff0c;平均分配到 服务器ip:8080和 服务器ip:8081进程中。 准备工作 准备两个tomcat&#xff0c;一个监听在8080端口&#xff0c;一个监听在8081端口。也可以准备多个tomcat。…...

正则表达式在Python中的高级应用:从HTML中提取数据

正则表达式在Python中的高级应用&#xff1a;从HTML中提取数据 作为一名资深的Python程序员&#xff0c;我深知正则表达式在文本处理中的重要性。尤其是在处理HTML文档时&#xff0c;正则表达式可以成为我们提取数据的强大工具。在本文中&#xff0c;我将通过一个实际的例子&a…...

docker compose 部署交互模式的容器-以Ubuntu为例

docker compose 部署交互模式的容器-以Ubuntu为例 问题介绍解决方式 同步发布在个人笔记docker compose 部署交互模式的容器-以Ubuntu为例 问题介绍 想通过 docker compose 方式部署一个交互模式的 Ubuntu 容器&#xff0c;但是以平常的方式执行部署后&#xff0c;发现容器被创…...

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗&#xff0c;水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它&#xff0c;display: flex 和 justify-content: center 都可以完成&#xff01; display: flex&#xff1a;将元素定义为flex容器 justify-content&#xff1a;定义项目在主轴…...

记录贴-idea导入别人的项目

链接: IDEA导入Web项目的三种方式 链接: idea怎么导入别人的maven项目 链接: IDEA 如何导入别人的javaweb项目进行部署...

算法第九天:leetcode59.螺旋矩阵II

给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1a;n 1 输出&am…...

androidkiller重编译apk失败的问题

androidkiller重编译apk失败 参考&#xff1a; https://blog.csdn.net/qq_38393271/article/details/127057187 https://blog.csdn.net/hkz0704/article/details/132855098 已解决&#xff1a;“apktool” W: invalid resource directory name:XXX\res navigation 关键是编译…...

matlab中plot的一些用法

文章目录 一、基本用法二、绘制多个数据集三、设置线型、颜色四、添加标题和标签五、添加图例六、设置轴范围七、绘制网格八、 在同一图中绘制多个子图九、绘制带误差条的图十、绘制半对数图和对数图十一、绘制填充区域图十二、综合案例 一、基本用法 x 0:0.1:10; y sin(x);…...

Elasticsearch:Retrievers 介绍 - Python Jupyter notebook

在今天的文章里&#xff0c;我是继上一篇文章 “Elasticsearch&#xff1a;介绍 retrievers - 搜索一切事物” 来使用一个可以在本地设置的 Elasticsearch 集群来展示 Retrievers 的使用。在本篇文章中&#xff0c;你将学到如下的内容&#xff1a; 从 Kaggle 下载 IMDB 数据集…...

5 webSocket

webSockets 简介 什么是 websocket webSockets 是一种先进的技术;它可以在用户的浏览器和服务器之间打开交互式通信会话;使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应 websocket 是一种网络通信协议,是HTML5开始提供的一种在单…...

PD芯片诱骗取电电压给后端小家电用电:LDR6328

在智能家居浪潮的推动下&#xff0c;小家电作为日常生活中不可或缺的一部分&#xff0c;其供电方式的创新与优化正逐步成为行业关注的焦点。随着快充技术的普及&#xff0c;特别是Power Delivery&#xff08;PD&#xff09;协议的广泛应用&#xff0c;一种新型供电模式——利用…...

深入解析Linux文件权限管理:掌握`chmod`和`chown`命令

深入解析Linux文件权限管理&#xff1a;掌握chmod和chown命令 深入解析Linux文件权限管理&#xff1a;掌握chmod和chown命令 大纲&#xff1a;摘要&#xff1a;内容&#xff1a; 1. 引言2. 理解文件权限3. 使用chmod命令4. 使用chown命令5. 综合应用6. 常见问题与解决方案7. 结…...

3.Implementing Controllers

Implementing Controllers 控制器提供了对应用程序行为的访问&#xff0c;这些行为通常通过一个服务接口来定义。控制器解释用户输入&#xff0c;并将其转换为由视图展示给用户的模型。Spring 以非常抽象的方式实现了控制器&#xff0c;使得你能够创建各种各样的控制器。 Spr…...

如何分清楚常见的 Git 分支管理策略Git Flow、GitHub Flow 和 GitLab Flow

Git Flow、GitHub Flow 和 GitLab Flow 是几种常见的 Git 分支管理策略&#xff0c;它们帮助开发团队更高效地管理代码库和协同开发。 Git Flow Git Flow 是一种功能强大的分支管理模型&#xff0c;由 Vincent Driessen 提出&#xff0c;适用于发布周期较长、需要严格管理发布…...

Java垃圾收集器选择与优化策略

1.垃圾收集算法有哪些,可以聊一下吗? 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾。如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果…...

django命令

Django 的命令行工具 django-admin&#xff08;或 manage.py 中的 manage 函数&#xff09;提供了一系列的命令&#xff0c;用于执行各种管理任务。 1. check: 检查项目的 full 路径&#xff0c;确保没有错误配置。 2. compilemessages: 编译 .po 文件中的翻译&#xff0c;生…...

23种设计模式之命令模式

命令模式 1、定义 命令模式&#xff1a;将一个请求封装为一个对象&#xff0c;从而可用不同的请求对客户进行参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作 2、命令模式结构 Command&#xff08;抽象命令类&#xff09;&#xff1a;一般是…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...