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']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最短路径算法——A*算法

A*算法是静态路网中求解最短路径最有效的直接搜索算法&#xff0c;也是解决许多搜索问题的有效算法&#xff0c;广泛应用于机器人路径搜索、游戏动画路径搜索等。它是图搜索算法的一种。 A*算法是一种启发式的搜索算法&#xff0c;它是基于深度优先算法(Depth First Search, D…

pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本

一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份&#xff0c;随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的&#xff0c;每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残&#xff0c;解决摧残的方法就是把命令…

脑肿瘤有哪些分类? 哪些人会得脑肿瘤?

脑肿瘤&#xff0c;作为一类严重的脑部疾病&#xff0c;其分类复杂多样&#xff0c;主要分为原发性脑肿瘤和脑转移瘤两大类。原发性脑肿瘤起源于颅内组织&#xff0c;常见的有胶质瘤、脑膜瘤、生殖细胞瘤、颅内表皮样囊肿及鞍区肿瘤等。其中&#xff0c;胶质瘤作为最常见的脑神…

dict 之ai学习

我的代码&#xff1a; k["name","age","job"] v1["zhangsan",25,"programmer"] v2["lisi",33,"worker"] v3["wangwu",55,"scientist"] s4dict(zip(k,v1,v2,v3)) for key,valu…

Java 零基础自学,如何系统全面地自学 Java 语言?

粉丝问&#xff1a;他只是一个普通人&#xff0c;初识Java&#xff0c;真的很想学好它。但是现在却只是在网上课堂上看Java基础课程&#xff08;入门知识&#xff0c;面向对象&#xff0c;常用类&#xff0c;异常等等&#xff09;看着看着就发现一头雾水&#xff0c;没有方向&a…

nodejs学习之process.env.NODE_ENV

简介 process对象是 Node 的一个全局对象&#xff0c;提供当前 Node 进程的信息。它可以在脚本的任意位置使用&#xff0c;不必通过require命令加载。该对象部署了EventEmitter接口。 process.env 属性返回包含用户环境的对象 使用 pnpm init新建index.js const { env } r…

【C++】类和对象(二)

个人主页 创作不易&#xff0c;感谢大家的关注&#xff01; 文章目录 ⭐一、类的默认成员函数&#x1f48e;二、构造函数⏱️三、析构函数&#x1f3dd;️ 四、拷贝构造函数&#x1f384;五、赋值运算符重载&#x1f3e0;六、取地址运算符重载&#x1f389;const成员 ⭐一、类…

系统架构设计师教程 第3章 信息系统基础知识-3.7 企业资源规划(ERP)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.7 企业资源规划&#xff08;ERP&#xff09; 3.7.1 企业资源规划的概念3.7.2 企业资源规划的结构3.7.2.1 生产预测3.7.2.2 销售管理&#xff08;计划&#xff09;3.7.2.3 经营计划&#xff08;生产计划大纲&#xff09;3.7.2.4 …

C语言 | Leetcode C语言题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){int i 0;int j matrixColSize[0] - 1;while(j > 0 && i < matrixSize){if(target < matrix[i][j])j--;else if(target > matrix[…

ORBSLAM3 ORB_SLAM3 Ubuntu18.04 ROS Melodic 虚拟镜像 下载

build.sh 和 build_ros.sh编译结果截图&#xff1a; slam测试视频&#xff1a; orbslam3 ubuntu18.04 test 下载地址&#xff08;付费使用&#xff0c;不能接受请勿下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/13YeJS4RGa3fBrG8BKfPbBw?pwds6vg 提…

Docker 运维常用命令及问题案例

目录 以下是一些常见的 Docker 命令&#xff1a; 镜像相关&#xff1a; 容器相关&#xff1a; 数据卷相关&#xff1a; 网络相关&#xff1a; 其他&#xff1a; 常见问题案例&#xff1a; 案例一&#xff1a;容器无法启动 案例二&#xff1a;容器性能问题 案例三&…

运维 | Linux 系统中 MySQL 的安装与使用记录

Linux 系统中 MySQL 的安装与使用记录 介绍 基本信息 在 Linux 系统中&#xff0c;MySQL 是一种常用的关系型数据库管理系统。 MySQL 默认安装位置&#xff1a;/var/lib/mysql 检查默认安装位置&#xff1a; which mysql该命令将显示 MySQL 二进制可执行文件的路径。在大…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…

伪原创文章生成器软件,为你自动写作文章效率高

在当今快节奏的数字化时代&#xff0c;内容创作的需求如潮水般涌来。无论是博主们需要频繁更新的优质博文&#xff0c;还是企业宣传需要的大量文案&#xff0c;亦或是学者们的研究成果阐述&#xff0c;都对写作的效率提出了极高的要求。而就在这时&#xff0c;伪原创文章生成器…

软件测试点

案例&#xff1a; 需求&#xff1a; 动物品系&#xff1a;动物类型-动物品系体重&#xff1a;[1,无穷)年龄&#xff1a; 等价类&#xff1a;6个 界面测试&#xff1a; 默认值、颜色、布局动物品系下拉框&#xff0c;数据来源&#xff0c;排序规则 功能测试&#xff1a; …

Python游戏开发之制作捕鱼达人游戏-附源码

制作一个简单的“捕鱼达人”游戏可以使用Python结合图形界面库&#xff0c;比如Pygame。Pygame是一个流行的Python库&#xff0c;用于创建视频游戏&#xff0c;它提供了图形、声音等多媒体的支持。以下是一个基础的“捕鱼达人”游戏框架&#xff0c;包括玩家控制一个炮台来射击…

Java并发编程与高并发解决方案笔记

本课程将结合大量图示及代码演示&#xff0c;带你掌握多线程并发编程&#xff08;线程安全&#xff0c;线程调度&#xff0c;线程封闭&#xff0c;同步容器等&#xff09;与高并发处理思路与手段&#xff08;扩容&#xff0c;缓存&#xff0c;队列&#xff0c;拆分等&#xff0…

Linux—KVM虚拟化中(虚拟机克隆,快照,还原,删除)等应用实例

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

在不同环境中,Java应用程序和MySQL等是如何与Docker进行交互和操作的?

1. 本地开发环境 在本地开发环境中&#xff0c;可以使用Docker Compose来管理和运行Java应用程序容器和MySQL容器。通常&#xff0c;会创建一个docker-compose.yml文件&#xff0c;定义需要的服务及其配置。 以下是一个示例docker-compose.yml文件: version: 3 services:app…

最优化理论与方法-第十讲-补充,鞍点与强对偶

文章目录 1. 原问题和对偶问题2. Slater 条件3. 鞍点 1. 原问题和对偶问题 用原问题(Primal Problem)中的P表示原问题&#xff0c;具体如下&#xff1a; ( P ) min ⁡ f ( x ) s t . g i ( x ) ≤ 0 , i 1 , ⋯ , m , h i ( x ) 0 , i 1 , ⋯ , l , x ∈ X \begin{equatio…