1.前言
遇到朋友有一个替换两个关键词之间的关键词的需求,之前也查过怎么做,但文章几乎为零(虽然有零宽断言的文章,但没有把这个需求作为用法明确体现出来)。个人理解的零宽断言的用处就是:“对匹配内容的上下文加以限定且限定的规则不参与匹配结果”。使用python正则。
2.内容
假如我们有front_key 目标内容rear_key顺序排列组成字符串,根据目标内容前后位置关系,可分为两组:
- 前序断言 (?<=) (?<!)
置于想要匹配的内容之前,断言目标内容前:一定是某个内容(?<=内容)、一定不是某个内容(?<!内容)。
#re.sub(匹配模式,替换内容,代匹配字符串)
#以下例子把匹配到的内容替换为'--'
import re
s="www.kikyo.ink kikyo.ink"
#断言匹配内容前一定是'www'
print(re.sub(r"(?<=www.)kikyo.ink","--",s))
#输出:www.-- kikyo.ink
import re
s="www.kikyo.ink kikyo.ink"
#断言匹配内容前一定不是'www'
print(re.sub(r"(?<!www.)kikyo.ink","--",s))
#输出:www.kikyo.ink --
-
后序断言 (?=) (?!)
置于想要匹配的内容之后,断言目标内容后:一定是某个内容(?<=内容)、一定不是某个内容(?<!内容)。
import re
s = "kikyo.com kikyo.ink"
#断言匹配内容后一定是'ink'
print(re.sub(r"kikyo.(?=ink)", "--", s))
#输出结果:kikyo.com --ink
import re
s = "kikyo.com kikyo.ink"
#断言匹配内容后一定不是'ink'
print(re.sub(r"kikyo.(?!ink)", "--", s))
#输出结果:--com kikyo.ink