title: P18|Python正则表达式中的贪婪、向后引用、零宽断言author: Adolph Leecategories: 编程基础tags:
Python
基础
正则表达式
断言
在计算机编程中,正则表达式堪称我们处理字符串的神奇,许多复杂的工作,往往使用正则表达式就能简单的搞定。在之前我们已经涉及到了正则表达式的部分内容,下面我们来讲解一下有关正则表达式的贪婪模式,向后引用与零款断言。
贪婪模式
当正则表达式中包含能接受重复的界定符时,正则表达式会在能够匹配的情况下尽可能多的匹配字符。这种匹配模式我们称之为贪婪模式,但有时候我们需要程序不这么贪婪,还是更加懒惰一些,也就是需要程序尽可能少的匹配符合条件的字符串,贪婪模式与懒惰模式的切换只需要在原表达式后方加上一个问号。
实例一:'a.*b',这个表达式将会匹配以a开头以b结尾的所有字符串,例如'abbbabbbab',匹配的结果将是整个字符串,如果使用懒惰模式将正则表达式修改为'a.*?b',将只会匹配'ab'。
实例二:匹配字符串中的所有url
分组
在讲解向后引用之前,我们先讲解一下分组,分组就是用一对圆括号()包裹起来的正则表达式内容,从正则表达式的左边开始每一个圆括号就是一个分组,分组的索引是从一开始的。
分组分为有命名分组和无命名分组
使用search分组完成后,可以通过group或者groups获取分组中的内容
在正则表达式前加上?P
为分组命名
向后引用
正则表达式中我们可以对整个分组进行一些正则操作,例如重复操作符。
\num 正则表达式中利用反斜杠加分组索引引用无命名分组
(?P=name) 正则表达式用利用(?P=name)引用命名分组
零宽断言
零宽断言是正则表达式的一种方法,用于查找在某些内容(但并不含这些内容)之前或之后的东西,也就是说它们是用于指定位置,这个位置应该满足一定的条件(断言),因此这些条件也常被称之为零宽断言。零宽断言可以分为前向肯定断言、前向否定断言、后向肯定断言、后向否定断言。
前向肯定断言(?=)
前向否定断言(?!)
后向肯定断言(?<=)
后向否定断言(?
前向肯定断言 (?=)
它断言自身出现的位置的后面能匹配表达式,例如匹配所有以ing结尾的单词,并只返回前面部分
前向否定断言 (?!)
它断言自身出现位置的后面不能包含指定表达式,例如匹配一个字符串中的四位数字,且这四位数字的后面不能是数字
后向肯定断言 (?<=)
它断言自身出现位置的前面能够匹配表达式,例如匹配所有以a开头的单词,并只返回单词除a以外的部分
后向否定断言 (?
它断言自身出现位置的前面不能包含指定表达式,例如匹配所有不以字母开头的数据
练习一
找出字符串中所有重复出现的单词