正则零宽断言

警告
本文最后更新于 2021-09-30,文中内容可能已过时。

1.前言

对匹配内容的上下文加以限定且限定的规则不参与匹配结果

2.内容

假如我们有front_key 目标内容rear_key顺序排列组成字符串,根据目标内容前后位置关系,可分为两组:

  • 前序断言 (?<=) (?<!)

置于想要匹配的内容之前,断言目标内容前:一定是某个内容(?<=内容)、一定不是某个内容(?<!内容)

1
2
#re.sub(匹配模式,替换内容,代匹配字符串)
#以下例子把匹配到的内容替换为'--'
1
2
3
4
5
6
import re
s="www.kikyo.ink  kikyo.ink"
#断言匹配内容前一定是'www'
print(re.sub(r"(?<=www.)kikyo.ink","--",s))

#输出:www.--  kikyo.ink
1
2
3
4
5
6
import re
s="www.kikyo.ink  kikyo.ink"
#断言匹配内容前一定不是'www'
print(re.sub(r"(?<!www.)kikyo.ink","--",s))

#输出:www.kikyo.ink  --
  • 后序断言 (?=) (?!)

    置于想要匹配的内容之后,断言目标内容后:一定是某个内容(?<=内容)、一定不是某个内容(?<!内容)

1
2
3
4
5
6
import re
s = "kikyo.com     kikyo.ink"
#断言匹配内容后一定是'ink'
print(re.sub(r"kikyo.(?=ink)", "--", s))

#输出结果:kikyo.com     --ink
1
2
3
4
5
6
import re
s = "kikyo.com     kikyo.ink"
#断言匹配内容后一定不是'ink'
print(re.sub(r"kikyo.(?!ink)", "--", s))

#输出结果:--com     kikyo.ink

参考百度百科-零宽断言

0%