2024.3.28

正则进阶之()

()分组读取
在我们使用()对部分字符进行分组时,往往会遇到,一个正则式的()后面有次数限定符,诸如: * + {}等
这时,我们用match或search函数匹配到的group(0)都没有什么问题,都是一个可以全部满足正则式子的字符串
但是现在,这里的group(1)----先只讨论一个分组----会是什么呢,通过实验得知,它里面是包含的是,最后一组能匹配()里正则的组合
在这里插入图片描述
这时,如果还想读取类似 ‘你好’ ‘h1’,就无法实现了
除非先按照’>'将字符串分割(split函数)处理,否则它就被计算机抛弃了,无法人为读取它

()嵌套
那么,我们在原本的分组外面原封不动的套一层()会有用吗,答案是否定的
它只会多出一个分组,group的编号可以喜加一,但是里面的内容还是一样的,无法读取到被抛弃的那些
在这里插入图片描述

在这里插入图片描述

非捕获分组
(?:正则)
这里冒号后面的正则表达式会进行匹配却不会进行储存

分组引用
最难懂的一集
如果我们有如下的正则表达式
r"<(.+)><(.+)>.+</\2></\1>"
现在,我们已经有了两个捕获分组,group(1)和group(2)
此时,我们用正则表达式来对字符串匹配
我是标题哈<title> str1<br/> 因为group(1)现在捕获的就是’html’<br/> group(2)捕获的就是’title’<br/> 所以我们可以直接在后面用它们进行匹配,str1就可以正常匹配出来<br/> 但如果我们换一个字符串来匹配<br/> <title>我是标题哈 str2
现在,因为后面\2的位置与前面捕获的’title’不同,所以str2的结果是匹配失败的
这种重复利用分组编号引用的方式大多用于有重复项的匹配

分组命名
紧接着分组引用,我们可以延申出别的引用方式,因为记编号容易记混,所以我们可以给分组进行命名
格式为
(?P<名字>pattern)----------------<>里不用引号
现在的我们可以直接用它的名字来对这个分组进行读取--------group(‘名字’)是合法的,group里记得加引号,因为它的名字是字符串形式储存的
如果要像上面一样在正则表达式里面引用的话,要用格式
(?p=名字)---------------这里名字也不用引号
效果和上面的分组引用相同

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值