python re零宽断言踩坑 re.error: look-behind requires fixed-width pattern

python re零宽断言踩坑

在在线的正则校验工具上写了大半天才写出来的表达式,往python里一粘贴复制,代码行飘红,强行运行之后,报错.
表达式:

#用单引号替换txt_line中匹配到的双引号
param = re.sub(r'(?<=param":(\s)*"\{(.*))"(?=.*(\})", "(in|co))','\'',txt_line)
re.error: look-behind requires fixed-width pattern

错误原因就是在

(?<=param":(\s)*"\{(.*))

这里用例*号来表示变长字符了.而re模块不支持断言变长.如果改成

param = re.sub(r'(?<=param":(\s)"\{)"(?=(\})", "(in|co))','\'',txt_line)

就不会报错了.但是也就无法匹配到我想要的字符了.

零宽断言分类

零宽断言可分为正向、反向两类,每类又分为预测先行和回顾后发两种:

正预测先行断言

语法是(?=exp),它断言此位置的后面能匹配表达式exp.

正回顾后发断言

语法是(?<=exp),它断言此位置的前面能匹配表达式exp.

负预测先行断言

语法是(?!exp),它断言此位置的后面不能匹配表达式exp.

负回顾后发断言

语法是(?

零宽断言详情描述可见:

https://www.jianshu.com/p/c22bbdda2728

你可能感兴趣的:(测试,python,python,正则表达式)