第11.25节 Python正则表达式编译re.compile及正则对象使用

Python正则表达式工程实践:从回溯陷阱到可维护正则API 正则表达式是文本处理的底层基础设施,其本质是将模式编译为有限状态机进行匹配。理解Python re模块的编译机制、回溯原理与Unicode行为,是避免性能崩溃和逻辑错误的关键。命名捕获组、re.compile预编译、VERBOSE注释模式等技术,显著提升正则的可读性、可测试性与协作效率。在日志解析、配置文件操作、多语言清洗等真实场景中,合理运用环视断言、占有量词和标志控制(如DOTALL、MULTILINE),可构建稳定可靠的文本处理流水线。本文聚焦Python原生re模块的深度工程化用法,覆盖从调试定位到 阅读详情

一、 引言
在《第11.2节 Python 正则表达式支持函数概览》介绍了re模块的主要函数,在《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》重点介绍了几个搜索函数。这些介绍的搜索函数都是直接使用正则表达式去匹配搜索文本,实际上re模块还支持将正则表达式先编译再搜索匹配,这种先编译后搜索在同一个正则表达式多次去执行匹配时可以提高匹配执行效率。

二、 re.compile函数

  1. 语法:compile(pattern, flags=0)
  2. 语法释义:
    pattern是要匹配的正则表达式,flags是在《第11.2节 Python 正则表达式支持函数概览》介绍的搜索标记。
  3. 返回结果:
    返回结果是一个类型为re.Pattern的对象,该对象称为 “正则表达式对象”或“正则对象”。该对象可以直接使用自己的方法search、match等进行搜索和匹配。

三、 正则对象Pattern的属性

  1. Pattern.flags:正则匹配标记。这是可以传递给 compile() 的参数,任何 (?…) 内联标记,隐性标记比如 UNICODE 的结合。不过这里的值是一个数字,而不是使用标记的常量,数字与匹配标记常量对应关系请参考《第11.2节 Python 正则表达式支持函数概览》;
  2. Pattern.groups:捕获组合的数量;
  3. Pattern.groupindex:在命名组内记录组名和组序号的映射关系。如果没有命名组,那字典就是空的。
  4. Pattern.pattern:编译对象的对应的正则表达式。

四、 正则对象的方法

  1. Pattern.search(string[, pos[, endpos]])
    这个方法与re.search函数功能类似,扫描整个 string 寻找第一个匹配位置, 并返回一个相应匹配对象。如果没有匹配,就返回 None。不过比re.search函数多了两个可选参数,可选的第二个参数 pos 给出了字符串中开始搜索的位置索引,默认为 0,如果大于0,对于元字符 ‘^’ 和特殊序列\A样式字符匹配字符串真正的开头,或换行符后面的第一个字符,但不会匹配索引规定开始的位置。
    可选参数 endpos 限定了字符串搜索的结束;当endpos比搜索文本长度小的时候,字符串末尾的匹配如’$’会匹配到endpos对应位置,也就是实际搜索文本变成了原搜索文本从开始到endpos位置切片对应的新搜索文本。

案例:

>>> str='Learning Python  with LaoYuan123'
>>> str[22:29]
'LaoYuan'
>>> patstr='LaoYuan$'
>>> pat=re.compile(patstr)
>>> pat.search(str,endpos=29)
<re.Match object; span=(22, 29), match='LaoYuan'>
>>>

上述案例中搜索文本结尾是123,但指定了结束位置刚好到搜索模式串,因此$最终匹配成功。

  1. Pattern.match(string[, pos[, endpos]])
    该方法与re.match相对应,功能相差不多,从 string 的 开始位置 能够找到这个正则样式的任意个匹配,就返回一个相应的 匹配对象。如果不匹配,就返回 None 。可选参数 pos 和 endpos 与 search() 含义相同。
    如:
>>> patstr='Python'
>>> str='LaoYuanPython'
>>> pat=re.compile(patstr)
>>> pat.match(str,7)
<re.Match object; span=(7, 13), match='Python'>
>>>

  1. Pattern.fullmatch(string[, pos[, endpos]])
    该方法与re.fullmatch()函数相对应,如果整个 string 匹配这个正则表达式,就返回一个相应的 匹配对象 。 否则就返回 None。可选参数 pos 和 endpos 与 Pattern.search() 含义相同。
    案例:
>>> pat=re.compile(r"第[一-十][章回](.)*")
>>> pat.fullmatch('第二回 悟彻菩提真妙理 断魔归本合元 ')
<re.Match object; span=(0, 19), match='第二回 悟彻菩提真妙理\u3000断魔归本合元 '>
>>>
  1. Pattern.split(string, maxsplit=0)
    等价于 re.split 函数,只是使用了编译后的正则对象来调用。
    案例:
>>> pat=re.compile(r'(\W+)')
>>> pat.split('Hello,world')
['Hello', ',', 'world']
>>>
  1. Pattern.findall(string[, pos[, endpos]])
    类似函数 re.findall函数,只是使用了正则对象来调用,比re.findall多了两个可选参数 pos 和 endpos用于限制搜索范围,这两个参数的作用与Pattern.search方法的这两个参数一样。
    案例:
>>> pat=re.compile(r'(\w+)')
>>> pat.findall('Learning python with LaoYuan')
['Learning', 'python', 'with', 'LaoYuan']
>>>
  1. Pattern.finditer(string[, pos[, endpos]])
    类似函数re.finiter() , 使用了编译后的正则对象来调用,比re.finiter()多了两个可选参数 pos 和 endpos用于限制搜索范围,这两个参数的作用与Pattern.search方法的这两个参数一样。
    案例:
>>> pat=re.compile(r"第[一-十][章回]")
>>> for i in pat.finditer("第一回灵根育孕源流出 心性修持大道生 第二回悟彻菩提真妙理 断魔归本合元神"):print(i)

<re.Match object; span=(0, 3), match='第一回'>
<re.Match object; span=(19, 22), match='第二回'>
>>>
  1. Pattern.sub(repl, string, count=0)
    等价于 re.sub函数,使用了编译后的正则对象来调用。
    案例:
>>> patstr=r'(?i)(python)'
>>> pat=re.compile(patstr)
>>> pat.sub(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress')
'Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress'
>>>
  1. Pattern.subn(repl, string, count=0)
    等价于 re.subn() 函数,使用了编译后的正则对象来调用。
>>> pat.subn(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress')
('Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress', 2)
>>>

老猿Python,跟老猿学Python!
博客地址:https://blog.youkuaiyun.com/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

Python正则表达式通配符详解:从基础通配到高级匹配实战 正则表达式作为文本处理的强大工具,其核心在于通过特定模式匹配字符串。通配符是正则表达式的基石,用于代表一类或任意字符。在Python中,点号(.)、反斜杠转义序列(如\d、\w)和方括号([])构成了基础通配体系,分别实现匹配任意字符、预定义字符类和自定义字符集合。理解其原理能显著提升文本解析效率,广泛应用于日志分析、数据清洗和爬虫开发等场景。本文聚焦Python 3.8+环境,深入解析通配符的细微差别与高效用法,涵盖贪婪匹配、零宽断言等高级技巧,帮助开发者精准处理IP地址提取、HTML解析等实际问题,规避 阅读详情

相关推荐

Python正则表达式实战:re模块核心功能全解析

本文全面解析Python中re模块的核心功能,从正则表达式基础到高级应用,涵盖匹配、替换、分组提取等实战技巧。通过具体代码示例展示如何高效处理文本数据,包括数据清洗、日志分析和表单验证等场景,同时提供性能优化建议和调试方法,帮助开发者掌握这一强大的文本处理工具。

weixin_29065791的博客 773

Python中 re.compile 函数的使用

re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。

python学习者的博客 1925

IVP 2021 UNETR: Transformers for 3D Medical Image Segmentation

动机 具有跟踪和扩展路径的全卷积神经网络(FCNNs)(如编码器和解码器),近年来在各种医学图像分割应用中显示出了突出的地位。在这些体系结构中,编码器通过学习全局上下文表示来扮演一个不可或缺的角色,该全局上下文表示将进一步用于解码器的语义输出预测。 卷积层作为FCNN的主要构造块,其局部性限制了此类网络学习长时空间依赖的能力。 在NLP领域,基于transformer的模型已经在各种任务中实现了最先进的基准。transformer中的自我注意机制使他们能够动态地突出词序列的重要特征并学习其长时依赖关系。这

smile909的博客 1979

comment_line = re.compile(rb“^ *#“) SyntaxError: invalid syntax

Ubuntu使用repo下载sdk包时出现以下问题:由于我这边Python版本是2.7版本,不识别b字符,需要将Python指定为3.0版本的,集体操作如下:

qq_35003864的博客 878

STM32鱼塘水质监测系统设计与实现

物联网技术在农业领域的应用正逐步深入,其中传感器网络作为关键基础设施,通过实时数据采集与传输实现环境监测。基于STM32微控制器的嵌入式系统因其高性能和低功耗特性,成为物联网终端设备的理想选择。该系统通过DS18B20水温传感器、PH传感器和浊度传感器组成的多参数检测网络,配合4G通信模块实现水质数据的远程监控。在农业物联网场景中,这种解决方案不仅大幅降低了传统人工检测的成本,更能通过实时预警有效预防养殖损失。本文介绍的鱼塘水质监测系统正是这一技术的典型应用,展示了如何通过STM32和常见传感器构建高性价比

weixin_42173218的博客 620

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

re.compile 函数

https://www.runoob.com/python/python-reg-expressions.html re.compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。 语法格式为: re.compile(pattern[, flags]) 参数: pattern : 一个字符串形式的正则表达式 flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: re.

qq_15821487的博客 1万+

CMU的local_planner学习笔记

ros::Subscriber subOdometry = nh.subscribe//当接收到/state_estimation话题消息更新时启动odometryHandler回调函数 (消息格式:nav_msgs::Odometry消息内容:关于机器人或车辆的位置和方向(姿态)信息)pcl::PointCloud::Ptr freePaths(new pcl::PointCloud());

qq_35971623的博客 3876

Python re.compile(r'/\*(.*?)\*/', re.DOTALL)多行匹配字符串

多行匹配模式 问题 你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。 解决方案 这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。 比如,假设你想试着去匹配C语言分割的注释: >>> comment = re.compile(r'/\*(.*?)\*/') >>> text1 = '/*...

Through Da Storm 7001

基于 Mask R-CNN 的实例分割:从零开始构建一个强大的分割模型

在本文中,我们将介绍如何使用 Mask R-CNN(Region-based Convolutional Networks with Masks)实现实例分割。实例分割是计算机视觉中的一种任务,旨在识别并分割图像中的各个对象。我们将讨论如何准备数据集、配置 Mask R-CNN 模型并在自定义数据集上进行训练。

斌擎科技 1243

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2547

python compile正则_第11.25节 Python正则表达式编译re.compile及正则对象使用

一、引言在《第11.2节 Python 正则表达式支持函数概览》介绍了re模块的主要函数,在《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》重点介绍了几个搜索函数。这些介绍的搜索函数都是直接使用正则表达式去匹配搜索文本,实际上re模块还支持将正则表达式先编译再搜索匹配,这种先编译后搜索在同一个正则表达式多次去执行匹配...

weixin_39777543的博客 136

基于 FPGA 的 CNN 卷积神经网络之池化层 Verilog 实现

池化层是卷积神经网络(CNN)中的关键组件,用于降低特征图的维度,减少计算量和防止过拟合。常见的池化操作包括最大池化和平均池化。FPGA 提供了高效的并行处理能力,可以加速这些操作。池化层在 CNN 中扮演重要角色,通过降低数据维度提升计算效率。在 FPGA 上实现池化层,可以充分利用硬件资源实现高效的并行计算,有助于提高实时应用中的推理速度。

走向CTO的路上... 1256

python正则表达式compile_第11.25节 Python正则表达式编译re.compile及正则对象使用

一、引言在《第11.2节 Python 正则表达式支持函数概览》介绍了re模块的主要函数,在《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》重点介绍了几个搜索函数。这些介绍的搜索函数都是直接使用正则表达式去匹配搜索文本,实际上re模块还支持将正则表达式先编译再搜索匹配,这种先编译后搜索在同一个正则表达式多次去执行匹配...

weixin_40003767的博客 467

【用unity实现100个游戏之2】复刻实现经典2d平台跳跃游戏《蔚蓝 Celeste》(附工程源码)

蔚蓝》是一款备受好评的独立游戏,由游戏开发工作室开发并由发行。这款游戏于2016年首次发布,并在玩家和评论界收获了广泛赞誉。蔚蓝以其独特的艺术风格和引人入胜的故事而著称。游戏以深海为背景,玩家将扮演一个能够探索水下世界的神秘生物。游戏通过惊人的视觉表现和动态的海洋生态系统为玩家带来了令人难忘的游戏体验。无论是广阔的水下景观还是充满生机的海洋生物,蔚蓝都让玩家感受到深海的神秘和美丽。蔚蓝在玩法上注重探索和解谜。玩家可以在海底环境中自由游动,发现隐藏的地点和秘密,与各种生物互动,并解决环境谜题以继续前进。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4167

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python中如何使用正则表达式提取数据

以上为个人经验,希望能给大家一个参考。点击拿去50G+学习视频教程100+Python初阶、中阶、高阶电子书籍​​​​​​​。

ai520wangzha的博客 7572

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

网页数据的解析提取(正则表达式----re库详解)

前面,我们已经可以用requests库来获取网页的源代码,得到HTML代码。但我们真正想要的数据是包含在HTML代码之中的。要怎样才能从HTML代码中获取想要的信息呢?正则表达式是一个万能的方法!!!

在猴站学算法 2578

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

re正则使用文档 python

正则使用例子

veujs的博客 522

Python中字符串与正则表达式的25个常用操作

Python 中没有像 C++ 表示的字符类型(char),所有的字符或串都被统一为 str 对象。如单个字符 c 的类型也为 str,因此在python中字符也就是字符串 str 类型会被经常使用,一些高频用法如下 python字符串常用操作字符串去空格字符串替换字符串串联查找子串位置反转字符串字符串切片分割字符串子串判断正则表达式search 第一个匹配串match匹配开始位置finditer匹配迭代器findall 所有匹配匹配浮点数和整数匹配正整数re.I 忽略大小写re.split分割单词sub

雷恩Layne 5588

2020-11-28 正则表达式_re模块

re.match函数尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None re.search方法 扫描整个字符串并返回第一个成功的匹配 re.match与re.search的区别在于re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None。而re.search匹配整个字符串,直到找到一个匹配 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两..

PythonJIANGTANG的博客 195

Python正则表达式相关函数(学习笔记),大牛整理

span=(0, 1), match=‘经’>,

2401_83974370的博客 841

73_Python正则表达式之匹配分组和其他功能函数

re.sub() 或者 re.subn() 使用指定的符号替换内容,re.subn() 会现实替换的次数,re.sub不会显示。|:表示或者,正则表达式1|正则表达式2|正则表达式3,只要满足其中一个正则表达式即可。.:表示匹配除了换行之外的任意字符,\.就表示一个普通的符号,而不是正则表达式中的.re.compile() 表示编译正则表达式,用于提高正则匹配的效率。\:表示转义字符,让正则表达式中的字符失去原有的意义。():表示一个整体,表示分组,然后捕获。

在科技的浪潮中,我们寻找着创新的火种,在代码的海洋里,我们编织着智慧的网。腾飞开源,就是这样一个由技术精英汇聚而成的博客平台,我们致力于分享在Java、Python、IoT和人工智能等领域的最新研究成果和实战经验。 在腾飞开源的博客上,你会看到紧跟技术前 764

Python生态正则表达式库:Re、Regex、Lark、Parsimonious、PRegEx、pygrok

Python生态正则表达式库:Re、Regex、Lark、Parsimonious、pregex、pygrok

lonelymanontheway的博客 291

Python正则表达式高级实战:从匹配到文本解析系统

正则表达式是文本处理的基础能力,其核心在于模式匹配原理与状态机式扫描逻辑。通过预编译、命名捕获组和flags控制(如re.DOTALL、re.UNICODE),可显著提升性能与可维护性;结合re.finditer()、re.sub()函数式替换及re.escape()安全防护,能构建健壮的日志清洗、配置解析与爬虫提取流程。本文聚焦Python re模块的工程化用法,覆盖回溯优化、Unicode支持、跨行解析等高频痛点,助力数据工程师、后端开发者将正则从临时脚本升级为生产级文本解析系统。

weixin_33805743的博客 362
上一篇: Python正则表达式书写容易碰到的陷阱:\W*和\W*?匹配过程遇到的问题
下一篇: Python妙用re.sub分析正则表达式匹配过程
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值