正则进阶之()
()分组读取
在我们使用()对部分字符进行分组时,往往会遇到,一个正则式的()后面有次数限定符,诸如: * + {}等
这时,我们用match或search函数匹配到的group(0)都没有什么问题,都是一个可以全部满足正则式子的字符串
但是现在,这里的group(1)----先只讨论一个分组----会是什么呢,通过实验得知,它里面是包含的是,最后一组能匹配()里正则的组合
这时,如果还想读取类似 ‘你好’ ‘h1’,就无法实现了
除非先按照’>'将字符串分割(split函数)处理,否则它就被计算机抛弃了,无法人为读取它
()嵌套
那么,我们在原本的分组外面原封不动的套一层()会有用吗,答案是否定的
它只会多出一个分组,group的编号可以喜加一,但是里面的内容还是一样的,无法读取到被抛弃的那些
非捕获分组
(?:正则)
这里冒号后面的正则表达式会进行匹配却不会进行储存
分组引用
最难懂的一集
如果我们有如下的正则表达式
r"<(.+)><(.+)>.+</\2></\1>"
现在,我们已经有了两个捕获分组,group(1)和group(2)
此时,我们用正则表达式来对字符串匹配
现在,因为后面\2的位置与前面捕获的’title’不同,所以str2的结果是匹配失败的
这种重复利用分组编号引用的方式大多用于有重复项的匹配
分组命名
紧接着分组引用,我们可以延申出别的引用方式,因为记编号容易记混,所以我们可以给分组进行命名
格式为
(?P<名字>pattern)----------------<>里不用引号
现在的我们可以直接用它的名字来对这个分组进行读取--------group(‘名字’)是合法的,group里记得加引号,因为它的名字是字符串形式储存的
如果要像上面一样在正则表达式里面引用的话,要用格式
(?p=名字)---------------这里名字也不用引号
效果和上面的分组引用相同