比较详细Python正则表达式操作指南(re使用)[1]

Python 正则表达式使用--Re 模块详解 1. 常用正则表达式符号和特殊字符 2. Re 模块:核心函数和方法 2.1 re.compile() 编译函数 2.1.1re.compile() 语法格式 2.1.2re.compile() 用法 2.2 re.match() 和 re.search() 匹配和搜索函数 2.2.1re.match() 语法格式 2.2.2re.match() 用法 2.2.3re.search() 语法格式 2.2.4re.search() 用法 2.3 re.findall() 和 阅读详情

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用 regex 模块,当然偶尔你还是可能在老代码里发现其踪影。

 

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。使用这个小型语言,你可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、e-mail地址、TeX命令或任何你想搞定的东西。然後你可以问诸如“这个字符串匹配该模式吗?”或“在这个字符串中是否有部分匹配该模式呢?”。你也可以使用 RE 以各种方式来修改或分割字符串。


正则表达式模式被编译成一系列的字节码,然後由用 C 编写的匹配引擎执行。在高级用法中,也许还要仔细留意引擎是如何执行给定 RE ,如何以特定方式编写 RE 以令生产的字节码运行速度更快。本文并不涉及优化,因为那要求你已充分掌握了匹配引擎的内部机制。


正则表达式语言相对小型和受限(功能有限),因此并非所有字符串处理都能用正则表达式完成。当然也有些任务可以用正则表达式完成,不过最终表达式会变得异常复杂。碰到这些情形时,编写 Python 代码进行处理可能反而更好;尽管 Python 代码比一个精巧的正则表达式要慢些,但它更易理解。

简单模式

我们将从最简单的正则表达式学习开始。由于正则表达式常用于字符串操作,那我们就从最常见的任务:字符匹配下手。


有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动机),你可以查阅编写编译器相关的任何教科书。

字符匹配

大多数字母和字符一般都会和自身匹配。例如,正则表达式 test 会和字符串“test”完全匹配。(你也可以使用大小写不敏感模式,它还能让这个 RE 匹配“Test”或“TEST”;稍後会有更多解释。)

这个规则当然会有例外;有些字符比较特殊,它们和自身并不匹配,而是会表明应和一些特殊的东西匹配,或者它们会影响到 RE 其它部分的重复次数。本文很大篇幅专门讨论了各种元字符及其作用。

这里有一个元字符的完整列表;其含义会在本指南馀下部分进行讨论。

. ^ $ * + ? { [ ] \ | ( )

我们首先考察的元字符是"[" 和 "]"。它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集。字符可以单个列出,也可以用“-”号分隔的两个给定字符来表示一个字符区间。例如,[abc] 将匹配"a", "b", 或 "c"中的任意一个字符;也可以用区间[a-c]来表示同一字符集,和前者效果一致。如果你只想匹配小写字母,那幺 RE 应写成 [a-z].

元字符在类别里并不起作用。例如,[akm$]将匹配字符"a", "k", "m", 或 "$" 中的任意一个;"$"通常用作元字符,但在字符类别里,其特性被除去,恢复成普通字符。

你可以用补集来匹配不在区间范围内的字符。其做法是把"^"作为类别的首个字符;其它地方的"^"只会简单匹配 "^"字符本身。例如,[^5] 将匹配除 "5" 之外的任意字符。

也许最重要的元字符是反斜杠"""。 做为 Python 中的字符串字母,反斜杠後面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这样你就可以在模式中匹配它们了。举个例子,如果你需要匹配字符 "[" 或 """,你可以在它们之前用反斜杠来取消它们的特殊意义: "[ 或 ""。

一些用 """ 开始的特殊字符所表示的预定义字符集通常是很有用的,象数字集,字母集,或其它非空字符集。下列是可用的预设特殊字符:

\d 匹配任何十进制数;它相当于类 [0-9]。

\D 匹配任何非数字字符;它相当于类 [^0-9]。

\s 匹配任何空白字符;它相当于类 [ "t"n"r"f" v]。

\S 匹配任何非空白字符;它相当于类 [^ "t"n"r"f"
v]。

\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。


\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

这样特殊字符都可以包含在一个字符类中。如,["s,.]字符类将匹配任何空白字符或","或"."。

本节最後一个元字符是 . 。它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。"." 通常被用于你想匹配“任何字符”的地方。

重复

正则表达式第一件能做的事是能够匹配不定长的字符集,而这是其它能作用在字符串上的方法所不能做到的。不过,如果那是正则表达式唯一的附加功能的话,那么它们也就不那么优秀了。它们的另一个功能就是你可以指定正则表达式的一部分的重复次数。

我们讨论的第一个重复功能的元字符是 *。* 并不匹配字母字符 "*";相反,它指定前一个字符可以被匹配零次或更多次,而不是只有一次。

举个例子,ca*t 将匹配 "ct" (0 个 "a" 字符), "cat" (1 个 "a"), "caaat" (3 个 "a" 字符)等等。RE 引擎有各种来自 C 的整数类型大小的内部限制,以防止它匹配超过2亿个 "a" 字符;你也许没有足够的内存去建造那么大的字符串,所以将不会累计到那个限制。

象 * 这样地重复是“贪婪的”;当重复一个 RE 时,匹配引擎会试着重复尽可能多的次数。如果模式的後面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。


一步步的示例可以使它更加清晰。让我们考虑表达式 a[bcd]*b。它匹配字母 "a",零个或更多个来自类 [bcd]中的字母,最後以 "b" 结尾。现在想一想该 RE 对字符串 "abcbd" 的匹配。

 

StepMatchedExplanation
1aa 匹配模式
2abcbd引擎匹配 [bcd]*,并尽其所能匹配到字符串的结尾
3Failure引擎尝试匹配 b,但当前位置已经是字符的最後了,所以失败
4abcb退回,[bcd]*尝试少匹配一个字符。
5Failure再次尝次b,但在当前最後一位字符是"d"。
6abc再次退回,[bcd]*只匹配 "bc"。
7abcb再次尝试 b ,这次当前位上的字符正好是 "b"

 

RE 的结尾部分现在可以到达了,它匹配 "abcb"。这证明了匹配引擎一开始会尽其所能进行匹配,如果没有匹配然後就逐步退回并反复尝试 RE 剩下来的部分。直到它退回尝试匹配 [bcd] 到零次为止,如果随後还是失败,那么引擎就会认为该字符串根本无法匹配 RE 。


另一个重复元字符是 +,表示匹配一或更多次。请注意 * 和 + 之间的不同;*匹配零或更多次,所以根本就可以不出现,而 + 则要求至少出现一次。用同一个例子,ca+t 就可以匹配 "cat" (1 个 "a"), "caaat" (3 个 "a"),但不能匹配 "ct"。


还有更多的限定符。问号 ? 匹配一次或零次;你可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。


最复杂的重复限定符是 {m,n},其中 m 和 n 是十进制整数。该限定符的意思是至少有 m 个重复,至多到 n 个重复。举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "a////b" ,因为有四个。


你可以忽略 m 或 n;因为会为缺失的值假设一个合理的值。忽略 m 会认为下边界是 0,而忽略 n 的结果将是上边界为无穷大 -- 实际上是先前我们提到的 2 兆,但这也许同无穷大一样。


细心的读者也许注意到其他三个限定符都可以用这样方式来表示。 {0,} 等同于 *,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 *,+,或?。很简单因为它们更短也再容易懂。


python正则表达式re快速入门 简介 正则表达式(称为RE,或正则,或正则表达式模式)本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过 re 模块获得。 使用正则,可以为要匹配的可能字符串集指定规则,然后在任何字符串进行匹配。还可以使用正则修改字符串,或以各种方式将字符串拆分。 正则表达式模式被编译成一系列字节码,然后由用 C 编写的匹配引擎执行。正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达式完成。 简单模式 先来看看最简单的正则表达式,正则表达式最常用的任务就是匹配字符。 匹配 阅读详情

相关推荐

西安交通大学SQ轴承数据集(文末附数据)

西安交通大学SQ轴承数据集

qq_43271683的博客 1万+

JS常用正则表达式

"^\d+$"  //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$"  //正整数 "^((-\d+)|(0+))$"  //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$"  //负整数 "^-?\d+$"    //整数 "^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)

u012767263的专栏 1043

Tesla V100 Windows 部署实战:从驱动安装到模式切换的避坑指南

本文是一份详细的Tesla V100在Windows系统下的部署实战指南。文章从硬件组装、系统选择讲起,重点阐述了驱动安装的正确方法,并深入剖析了将计算卡从TCC模式切换至WDDM模式的诱惑与潜在陷阱。最终,作者推荐保持默认TCC模式,并提供了使用nvidia-smi命令行等稳定可靠的显卡监控方案,旨在帮助用户避开常见坑点,高效利用这张专业计算卡进行AI计算等任务。

java5的博客 1706

python:比较全面的常用正则表达式

一、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和非零开头的数字:^(0|[1-9][0-9]*)$6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?...

weixin_33802505的博客 154

PointPainting 复现

三维目标检测

weixin_58207716的博客 4532

多智能体强化学习MASAC算法:从原理到PyTorch实战详解

深度强化学习通过智能体与环境的交互试错来学习最优策略,是解决复杂序列决策问题的核心技术。其核心原理在于利用价值函数或策略梯度来最大化累积奖励,在机器人控制、游戏AI等领域展现出巨大技术价值。当面对多个智能体需要协同或竞争的复杂动态环境时,单智能体算法因环境非平稳性而面临挑战,多智能体强化学习应运而生。Multi-Agent Soft Actor-Critic (MASAC) 算法融合了SAC的稳定高效与中心化训练去中心化执行的范式,通过维护中心化Critic网络和独立策略网络,有效解决了多智能体协作中的信用

weixin_30080745的博客 327

Python正则表达式指南

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html1. 正则表达式基础1.1. 简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语...

weixin_33755554的博客 309

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

Python 正则式学习笔记

1.  Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.  re模块的基本函数 2.1使用compile加速 2.2 match和search 2.3 finditer 2.4 字符串的修改与替换 3.  更深入的了解re的组与对象 3.1编译后的Pattern对象 3.2

whycadi的专栏 6万+

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 542

【Qt】解决 FTH: (11284): *** Fault tolerant heap shim applied to current process. (亲测有效)

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers。容错堆垫片应用到当前的过程。这通常是由于以前的崩溃。win + r,输入regedit。

Fanjufei的博客 830

python中最常用的re正则表达式总结

import re x = re.search('r\D+a','123chenronghua') print(x.group()) s = re.search('r[a-z]+a','123chenronghua') print(s.group()) z = re.search('r[a-z]+a$','123chenronghuazhaobaoyua').group() print(z) c

weixin_41317950的博客 2143

CDR插件开发之CPG插件017 - 在VS2019中实现CPG插件调试(自动写入CPG、自动启动CDR)

在上篇文章中,讲解了图像导出实例:当文档打开后,自动导出当前页面的图像到系统临时文件夹。在代码编写过程中,导出图像路径变量tmpFileName 被修改了很多次,有没有办法实现调试功能,通过控制台打印变量,而不用编译成CPG后再通过消息框来调试?当然是可以的。本篇作为单独篇,以CDR X8版本为例,讲解CPG插件在VS2019中实现调试的具体方法。 工程搭建准备 按照惯例,本篇文章的序号为017,请直接拷贝上一个工程016-export-image(拷贝前最好清理掉 Debug、x64等编译目录..

Zebe 1809

python正则表达式:re库的使用

一、re re库是Python中使用正则表达式需要用到的库,是Python的标准库,无需安装,直接导入 二、正则表达式的表示类型 1、raw string类型(原生字符串类型):如r’[1-9]\d{5}’ 2、string类型,更加繁琐(将斜杠表示为转义字符):如‘[1-9]\d{5}’ 三、re库的功能函数 pattern:正则表达式的字符串或原生字符串 string:待匹配字符串 flags:正则表达式使用时的控制标记 flags常用取值: (1)re.I或re.IGNORECASE:忽略正则表达式

qq_41817925的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python 正则表达式 re模块 最全面超详细总结

本文会非常全面超级详细地介绍正则表达式以及Python的re模块,还不速速进来学习?

小康2022的博客 5885

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python Re库的基本使用

Re库的基本使用 Re库是python库的标准库,主要用于字符串匹配 正则表达式的表示类型:r’text’ Re库的主要功能函数 函数 说明 re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象 re.findall() 搜索字符串,以列表类型返回全部能匹配的子串 re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 re.findi

dave的技术成长之路 1万+

python 正则表达式re 模块的使用

正则表达式就是为了利用特殊符号,快速实现字符串的匹配,或者说是字符串的过滤1、表格12、表格2callable;def purge(): # 净化def template(pattern, flags=0): # 模板""""""else:else:s = []else:if c == 0:else:re的匹配语法有以下几种(pattern, string, flags=0):从头开始匹配re.search(pattern, string, flags=0) : 匹配包含。

2401_88244350的博客 1383

python变量命名的正则表达式_比较详细Python正则表达式操作指南(re使用)

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用 regex 模块,当然偶尔你还是可能在老代码里发现其踪影。就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中...

weixin_39928768的博客 1426

python正则表达式——re模块的使用

python正则表达式——学习re模块 本文所有的代码使用的python版本为python3.5.1,运行环境为Ubuntu 16.04 LTS, GCC 5.3.1. 本文参考的python文档版本为python3.5.2,强烈建议英语不错的同学直接读文档。这篇博客只是作者阅读文档时的学习笔记,若有纰漏请指出,让我们共同进步。正则表达式基础介绍正则表达式正则表达式re是python自带的模块,

大音希声大象无形 1万+

python正则表达式re各常用函数详解

pattern:被替换的字符串repl:替换成什么str,支持调用自定义函数string:字符串,句子count:替换的次数,默认0为无数次flags:控制正则表达式的匹配方式,如是否区分大小写,多行匹配等import reprint('替换全部word:')print(a)print('\n替换一次word:')print(b)print('\n替换全部word,忽略大小写:')print(c)图17 正则替换 re.sub()

m0_71559726的博客 3017

Python re模块 用法详解 学习py正则表达式看这一篇就够了 超详细

python内置正则表达式模块re提供了一个功能强大且高度灵活的工具集,使得正则表达式的使用变得更加高效和直观,本文包含了大部分使用re时会使用的功能,同时提供使用用例。 本指南从基础到进阶,详细介绍了 re 模块的核心功能,并通过丰富的示例帮助您掌握其应用技巧,希望本文能够为深入学习正则表达式的读者提供启发,同时也为初学者实践打下坚实的基础

m0_74187645的博客 2493

Python模块 —— re正则表达式

正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,对于所有编程语言通用。对于Python来说我们使用re模块来操作正则表达式来匹配我们想要的结果。

julong187的博客 1525

Python之正则表达式(re模块)

本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示:由于该站对MARKDOWN的表格支持的不是很好,所以本文中的表格均以图片的形式提供,大家如果看着比较模糊,可以放大来看或下载图片在本地查看。 正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语.

1万+

Python中使用re模块进行正则表达式匹配和替换

通过学习不同的元字符、字符类和量词,你可以创建出适合你需求的正则表达式,并处理复杂的文本数据。通过学习和实践,你可以掌握更多高级的正则表达式技巧,并使用它们来处理复杂的文本数据。通过组合不同的元字符、字符类和量词,你可以创建出适合你需求的正则表达式。正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换文本中的特定模式。这样,你可以提取匹配的子字符串,并在替换时使用它们。函数可以接受一个替换函数作为参数,这使得你可以根据匹配的子字符串执行更复杂的替换操作。函数,它返回替换后的字符串以及替换的次数。

weixin_46121540的博客 3566

Python之re模块实现正则表达式

ZONGXP的博客 8160

python——正则表达式re

目录 一、re模块介绍 1. re模块提供的类 2. re模块提供的函数 3. 标志位flags 二、使用re模块的步骤 1. 使用re模块进行正则匹配操作的步骤 2. 使用re模块进行内容查找、替换和字符串分隔操作的步骤 三、re模块简单应用示例 1. 匹配测试 2. 内容查找 3. 内容替换 4. 字符串分割 四、关于匹配对象的说明 五、说说正则表达式字符串前的r前缀 六、re模块综合应用实例 0. 实例背景与准备工作 实例1. 首先匹配玩家手中的牌是否符合游戏规则

zangba9624的博客 2428
上一篇: Python 代码调试技巧使用 PyDev 进行调试
下一篇: 比较详细Python正则表达式操作指南(re使用)[2]
CsharpGame
博客等级 码龄21年 11粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值