Python正则 断言

断言:中文意思是断然言之,十分肯定地说或做出判断。

在正则表达式中,断言可以指明在指定的内容的前面或后面会出现满足指定规则的内容。

比如"ABC DEF",正则可以用断言找出B(B前面有A的),也可以找出E(E后面有F的)。

断言是零宽度,指的是断言匹配的内容不会被保存到结果中,最终匹配的结果只是一个位置而已。

正则断言又分为下面四类:

1、(?=RE) 正向先行断言 指定位置后面能匹配RE

2、(?!RE) 负向先行断言 指定位置后面不能匹配RE

3、(?<=RE) 正向后行断言 指定位置前面能匹配RE

4、(?<!RE) 负向后行断言 指定位置前面不能匹配RE

正则断言术语解释:

正向:肯定,存在,匹配

负向:否定,不存在,不匹配

先行:从左向后为先行

后行:从向向左为后行

正则断言记忆小窍门:

正则断言术语记起来比较烧脑细胞,时间长了也会容易忘记,我们可以这样简化理解,正则断言就是对某个位置的判断,这个位置前面有什么和没有什么,这个位置后面有什么和没有什么。 有是 = ,没有是 ! ,默认是向后面,带 < 是向前面,正好 < 的箭头也是向前指的。

我就是这样记住了,这样记忆起来省事多了,学霸可以直接忽视。

 

1、(?=RE) 正向先行断言 指定位置后面能匹配RE

在正则表达式中,(?=RE)称为正向先行断言(positive lookahead)。

它用于在匹配过程中,查找满足某个条件的字符串,但不消耗匹配项。

正向先行断言,通俗理解就是匹配位置,在这个位置后面怎么样,满足给定的子表达式RE条件即可。

比如 do(?=ing),表示 do 后面这个位置要有字符 ing,注意这个 ing 只是条件,并不算在匹配结果。

再如字符串:"I come from class 10 and I am 19 years old now",这里面有2个数字:10 和 19,10是班级,19是年龄。

我们想得到年龄,现在如果用 '\d+' 去匹配的话,只能匹配到班级 10。

现在如果用 '\d+(?= years)‘ 去匹配的话,加上了条件,限定数字位置后面得有 ' years' 字符,这样加上条件后就能匹配到正确的年龄数字19 。

 

2、(?!RE) 负向先行断言 指定位置后面不能匹配RE

在正则表达式中,(?!RE)称为负向先行断言(negative lookahead)。

它用于在匹配过程中查找不满足某个条件的字符串,不消耗匹配项。

负向先行断言,通俗理解就是匹配位置,在这个位置后面不怎么样,不满足给定的子表达式RE条件即可。

如要获取美元的数量,我们让两们数字位置后面不匹配字符 ‘元’,这样能排除其它项,就可能美元的数量了。

 

3、(?<=RE) 正向后行断言 指定位置前面能匹配RE

在正则表达式中,(?<=RE)称为正向后行断言(positive lookbehind)。

它用于在匹配过程中查找满足某个条件的字符串之前的内容,并且不消耗匹配项。

正向后行断言,通俗理解就是匹配位置,在这个位置前面怎么样,满足给定的子表达式RE条件即可。

示例:想得到李四后面的数字,我们在数字位置前面加上限定条件 (?<=李四) 即可。

 

4、(?<!RE) 负向后行断言 指定位置前面不能匹配RE

在正则表达式中, (?<!RE) 称为负向后行断言(negative lookbehind)。

它用于在匹配过程中查找不满足某个条件的字符串之前的内容,并且不消耗匹配项。

负向后行断言,通俗理解就是匹配位置,在这个位置前面不怎么样,不满足给定的子表达式RE条件即可。

示例:想获取李四后面的数字,都是三位数字,用排除法,我们让三位数字前面不是 “张三” 或者不是 “王五” 即可。

 

正则表达式在线测试工具
人工服务

正则表达式付费代写、咨询、答疑解惑,专业、快速、高效帮您解决正则表达式方面的各种问题,可定制各类软件应用程序。

联系客服
正则表达式基础语法
. - 除换行符以外的所有字符。
^ - 字符串开头。
$ - 字符串结尾。
\d,\w,\s - 匹配数字、字符、空格。
\D,\W,\S - 匹配非数字、非字符、非空格。
[abc] - 匹配 a、b 或 c 中的一个字母。
[a-z] - 匹配 a 到 z 中的一个字母。
[^abc] - 匹配除了 a、b 或 c 中的其他字母。
aa|bb - 匹配 aa 或 bb。
? - 0 次或 1 次匹配。
* - 匹配 0 次或多次。
+ - 匹配 1 次或多次。
{n} - 匹配 n次。
{n,} - 匹配 n次以上。
{m,n} - 最少 m 次,最多 n 次匹配。
(expr) - 捕获 expr 子模式,以 \1 使用它。
(?:expr) - 忽略捕获的子模式。
(?=expr) - 正向预查模式 expr
(?!expr) - 负向预查模式 expr

在线客服QQ:543690914,备案号: 苏ICP备15037649号-32。东海县白塔埠镇佳诚电脑经营部版权所有。