问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python 标准库模块 - re

发布网友 发布时间:2022-09-07 17:28

我来回答

2个回答

热心网友 时间:2024-10-16 04:44

re模块被称为正则表达式,其作用为,创建一个“规则表达式”,用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等。

预定义字符:

\d:匹配所有的十进制数字0-9

\D:匹配所有的非数字,包含下划线

\s:匹配所有空白字符(空格、TAB等)

\S:匹配所有非空白字符,包含下划线

\w:匹配所有字母、汉字、数字a-z A-Z 0-9

\W:匹配所有非字母、汉字、数字,包含下划线

特殊字符:

$:匹配一行的结尾(必须放在正则表达式最后面)

^:匹配一行的开头(必须放在正则表达式最前面)

*:前面的字符可以出现0次或多次(0~无限)

+:前面的字符可以出现1次或多次(1~无限)

?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次

.:匹配除了换行符"\n"之外的任意单个字符

|:两项都进行匹配

[ ]:代表一个集合,有如下三种情况

[abc]:能匹配其中的单个字符

[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)

[2-9] [1-3]:能够做组合匹配

{ }:用于标记前面的字符出现的频率,有如下情况:

{n,m}:代表前面字符最少出现n次,最多出现m次

{n,}:代表前面字符最少出现n次,最多不受*

{,m}:代表前面字符最多出现n次,最少不受

{n}:前面的字符必须出现n次

热心网友 时间:2024-10-16 04:45

正则表达式引擎对正则表达式文本进行编译生成正则表达式对象,再由正则表达式对象对目标文本进行匹配,后返回匹配结果。

正则表达式中一共包含 2 中字符: 普通字符 、 元字符

匹配单个字符的元字符及其含义:

匹配重复性的元字符及其含义:

匹配位置的元字符及其含义:

分组匹配的元字符及其含义:

表示或运算的元字符:

转义元字符:

在 Python 中使用正则表达式,我们需要借助 re 模块提供的强大 API,下面我们就来学习几个 re 模块常用的接口吧~

参数说明: findall("正则表达式", "要匹配的字符串", flags=标志1|标志2|...)
返回值:以列表形式返回匹配到的字符串。

下面,我们用 findall 返回 Python 之禅中首尾用到的反义词:

运行结果:

当正则表达式中含有一个以上分组时, findall 返回的列表由元组构成,元组中包含每个分组匹配到的内容。如果只有一个分组,则返回由该分组匹配到的内容组所构成的列表:

match 函数返回的结果是一个 SRE_Match 对象:

SRE_Match 具有很多的属性,比如 .string 属性可以方便我们我获取在匹配时输入的字符串:

属性 .re 可以获取匹配时使用的编译后的正则表达式模式:

由于默认使用了 re.UNICODE ,所以我们这里的 \w 可以匹配中文字符。

属性 .regs 则以列表的形式返回正则表达式匹配到的内容以及各个分组陪陪到的内容,不过请注意,返回的都是索引的形式:

可以使用序列切片来看一下我们的正则表达式及其中的两个分组所匹配到的内容:

SRE_Match 对象也提供了非常多好用的方法,比如 groups 可以获取各个分组匹配到的内容:

group 则可以灵活地获取正则表达式或对应分组匹配到的内容:

如果使用的正则表达式定义了分组的名称, group 还可以通过名称获取相应分组匹配的内容:

在定义了分组的名称之后,还可以方便地使用 groupdict 以字典的形式返回所有分组匹配的结果:

最后需要注意的是, match 从字符串的开头开始匹配,如果开头不符合要求,则直接返回 None 。

与 match 匹配开头不同, search 匹配第一个符合规则的字符串,未成功则返回 None 。参数: re.search(pattern, string, flags=0) ;返回值同 match 。

在介绍 match 的使用时,最后一个例子,由于我们在字符串前面添加了 'PYTHON' 导致 match 使用原来的正则表达式无法匹配,返回 None 。此时,使用 search 就可以迎刃而解啦:

运行结果:

小结:

参数: re.split(pattern, string, maxsplit=0, flags=0) , split 功能非常强大,以正则表达式匹配到的标志来分隔字符串,比如下面这样一个混乱的字符串,我们要提取其中所有的数字:

下面,我们就来详细介绍一下 split 的用法。

首先,是以单字符切割:

以分号切割时,*生了 4 个子字符串,放在列表中返回。
下面,还是以单字符切割,但可以使用正则表达式中的 [] 来指定多种字符:

由于字符串 line 中有连续的 2 个分号,逗号或者空格,因此可以使用 [;\s,]+ 来切割:

最后,上面的字符串在切割时,分隔符都没有被保留下来,使用括号捕获分组,即可保留分隔符:

re.sub 提供比字符串的 replace 方法更加强大的功能:对于输入的字符串 string ,利用正则表达式 pattern 强大的字符串处理功能,实现复杂的字符串替换处理为 repl ,返回被替换后的字符串。

下面的例子中,我们将句子中多余的空格和数字去掉:

如果想要知道替换过程中,共发生了多少次替换,可以使用 subn :

小结:

上述的案例中,我们每次都需要传入正则表达式,相应的函数每次在调用时,都需要编译一次正则表达式。如果上述过程需要多次重复,那么每次都去耗费时间编译正则表达式是很不划算的。

re 模块为我们提供了 compile 函数,用来编译正则表达式模式,返回编译好模式。因此,可以把那些常用的正则表达式编译成正则表达式对象,以提高效率。

格式: re.compile(pattern, flags=0) ,其中 pattern 为编译时用的表达式字符串, flags 为编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的 flags 有:

注:使用按位或 | 连接多个 flags 。

我们上述介绍的 re 模块的匹配、分割、替换函数, compile 函数的返回值类提供了相应的方法,使用方式类似,只是不需要传入正则表达式字符串而已。

由于用法几乎一致,这里就不一一举例啦~

贪婪模式: * + ? {m,n} ,正则表达式的重复默认总是尽可能多得向后匹配内容。

非贪婪模式: *? +? ?? {m,n}? ,尽可能少的匹配内容。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...怎么插入耳机时 耳机和外放都有声音?我用驱动人生驱动过显示声卡是正... USB耳机插入听不到声音,用什么软件可以听到声音?我的耳机是赛德斯的,听... 用USB71耳机看电影和用35mm立体声耳机杜比音效看电影哪个效果好 学生和家庭情况如何填写呢? 当初老板帮我租房子,租了半年,老板说干满半年才能退,现在没有干满半年... 博湖县在哪买辣椒酱 宝宝都一岁多了,要记得做这款高钙食物,不要浪费长身体的机会 高钙零食可不可以帮助孩子长高呢? 文艺一些的纹身店名字 宝马325li是三缸吗? 如何选择浴室柜/卫浴柜,用落地式浴室柜好,还是悬挂式的好? 手机总是自动重启,怎么办呢? 纹身后可以吃酱油吗? 激光洗纹身后经常吃酱油会这样 linux 如何用find命令 查找符合条件的文件夹下的所有文件? itunes错误码4005 爱思助手图如下怎么办? 怎么把360流量防火墙关了?电脑上的进程怎么那么大??怎么把360防火墙关... 怎么把整个360流量防火墙关闭 360流量防火墙怎么关 期货沥青喊单在线直播 沥青期货(BU)的价格影响因素有哪些? 上海期货交易所沥青期货交易全指南 看到树子到下运气不好是吗 MIUI12系统怎么关闭HD模式 1吨8千克⊙1.08吨 圆圈里是填大于号还是小于号,还是等于号 1吨8o千克=()吨填写分数 用环回口建立EBGP要到达对方的路由吗 BGP参数 ebgp-multihop 请教? BGP参数 ebgp BGP 属性选路, 很想知道去往对端EBGP选路用哪个, 去往iBGP选路用哪个... 大兴安岭农商网贷靠谱吗 re模块的高级用法 oppor 9什么时候上的 OPPO Find 9什么时候上市? 治疗性乙肝疫苗的相关介绍 云南应对新冠肺炎疫情做好2020年高考工作的通知 全力做好2022年高考工作,如何确保高考全过程安全平稳顺利? 家电辐射无处不在 几个妙招让你减少伤害 如何避免常见的家电辐射? 电器沙发背靠背怎么样才能减少辐射?平时如何预防辐射? 2021年江苏省会计初级报名条件包括什么呢? 女主凌漪微+小说是什么 普析和东西的原子吸收哪个更好 国产原子吸收高端一点的有哪些品牌? 北京有用过上海光谱的原子吸收分光光度计的吗?质量和售后怎么样? 普析原子吸收进样器990怎么样,价格多少?私企 原子吸收哪家的好啊?性价比高的 ...要采购高效液相色谱仪 气相色谱仪 原子吸收分光光度计 牌子 型号... 王者荣耀卡双龙时间点 用喜欢小树林笑声告诉歌唱歌同学们捉迷藏这几个词组成一句通顺的话...