Pyhton——re模块

Pyhton——re模块

一、

re模块里有两种字符:
1、普通字符: 大多数字符和字母都会和自身匹配
2、元字符: . ^ $ * + ? { } [ ] | ( ) \

1、re.findall(“xx1”,“xx2”)——完全匹配。(xx1为要匹配的关键字,xx2为被匹配的内容)

2、. ——通配符(功能是任何字符都可以代替,除了“\n” 换行符)
在这里插入图片描述
3、^ ——从开头去匹配
在这里插入图片描述
4、 $ ——从结尾去匹配
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、

重复符号(重复紧挨着前面的那个字符)
1、* ——重复0到无穷次
加粗样式由于是0到无穷次,所以第一个"d"没有匹配上,也算

2、+ ——重复1到无穷次
在这里插入图片描述
3、 ? ——重复0到1次(如果有1次取1次,没有取0次)
在这里插入图片描述
在这里插入图片描述
4、{x} ——重复次数自己定,比如:
{2},重复两次.
在这里插入图片描述

{5},重复5次
在这里插入图片描述
如果是{2,5},则重复2到5次(包括2次跟5次)
在这里插入图片描述

注意:前面的 * + ? 等都是贪婪匹配,也就是取最大的数(比如有3个就取3个,有5个取5个,不会取两个,也不会取1个)。在后面加个 ?则变成惰性匹配,取最小
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、

[ ]——字符集
1、字符集里的字符与前面的字符形成组合进行匹配
在这里插入图片描述

2、前面说的符号在字符集里都变成普通符号
在这里插入图片描述

3、字符集里面的特殊符号

虽然前面的符号在字符集里变成普通符号,但是字符集里有另外的特殊符号 - ^ \

3(1)、 - ——这个减号意思是范围,比如:a-z,是a到z的意思
在这里插入图片描述
如果是重复字符集里需要多个,则:
在这里插入图片描述

3(2)、 ^ ——字符集里的尖角号意思是:非
在这里插入图片描述 a 到 f 都不匹配,所以匹配出az

3(3)、 \ ——让有意义的字符变没意义,让没意义的字符变有特定意义

反斜杠后边跟元字符去除特殊功能,比如 \ .
反斜杠后边跟普通字符实现特殊功能,比如\d
\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_ ]。
\b 匹配一个特殊字符边界,比如空格 ,&,#等

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

4、转义字符 \ 相关知识

在匹配规则前加一个 r ,其意思是:原生字符串,意味着使匹配规则里面的字符不作任何转义,没有特殊意义。

匹配失败
在这里插入图片描述
匹配成功
在这里插入图片描述

另外一种方法:

在前面加个 \ ,使第二个 \ 失去特殊意义
在这里插入图片描述
由于这个re模块,需要经过python解释器的编译,再进入re模块里,所以两个反斜杠变成一个反斜杠,这个反斜杠暂时没有意义,等进入到re模块里,这个反斜杠又有了意义,此时的 \b 就有其特殊意义,最后就能匹配成功。

同理:
在这里插入图片描述
这里的四个反斜杠,第一、三反斜杠使二四反斜杠失去特殊意义,变为普通符号,进入到正则后,两个反斜杠又变成一个普通字符 \ ,这时匹配成功,而后出来经过反编译,会输出两个反斜杠

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

四、

| ——意为“或”
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------
re.findall() 与 re.search() 区别:
findall() 会把所有匹配出的结果放到一个列表里面。
search()只会把第一个匹配出的结果拿出来放到一个对象里面。如果匹配不成功,则什么都不会返回。如果要取出这个对象里面的数值,用group()方法。
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

( ) ——分组功能

当要把零散的字符当成一个整体,就用括号括起来

没有括号
在这里插入图片描述
有括号
在这里插入图片描述
注意:

在这里插入图片描述

这里虽然把 abc 当作整体,但是匹配出来的结果不是想要的 abcabcabc ,这是因为findall()会优先把匹配结果组里的内容返回(也就是 abc), 如果想要匹配出 abcabcabc ;则取消权限即可。可在 abc 前面加 ?: 此时就会把优先权限取消。
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

分组之 ?P< name > —— 注意:P要大写

此功能是给匹配出来的内容分组命名

在这里插入图片描述
只要名字:
在这里插入图片描述
只要年龄:
在这里插入图片描述

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

re模块下的方法:

findall() 与 search() 具体用法看前面

1、re.match() ——从开头进行匹配,匹配不成功会报错。匹配成功用group()取出来;此方法用的很少,多数用search() 。

2、re.spilt() —— 分割。
注意:如果左边没有内容,则会分割出一个 空(" ")出来。

在这里插入图片描述
3、re.sub(“xx1”,“xx2”.“xx3”) —— 替换。xx1为替换前对象;xx2为替换后对象;xx3为内容
在这里插入图片描述

3、re.subn() —— 使用方法跟sub一样。结果会做成一个元组,返回替换次数
在这里插入图片描述

4、re.compile() —— 可以把匹配规则装进一个变量里;如果需要对多个内容进行同一个规则匹配,则可以使用此方法
在这里插入图片描述

5、re.finditer() —— 跟 findall() 差不多,会把结果封装进一个迭代器,返回迭代器对象
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值