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.

负回顾后发断言

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

零宽断言详情描述可见:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值