首页 > 解决方案 > 正则表达式 - 后视需要固定宽度的模式错误

问题描述

代码:

text = "('hel'lo') eq 'some 'variable he're'"
re.compile(r"(?<!\(|(?<=eq ))'(?!\)|\Z)").sub(string=text, repl="''")

得到错误:

re.error: look-behind requires fixed-width pattern

预期输出

('hel''lo') eq 'some ''变量 he''re'

标签: pythonregexpython-3.x

解决方案


如果你想断言左边的东西不是eq ,它应该是消极的后视(?<!而不是积极的后视。

您可以使用 2 个后向断言来编写模式。

(?<!\()(?<!eq )'(?!\)|\Z)

正则表达式演示| Python 演示

示例代码

import re
text = "('hel'lo') eq 'some 'variable he're'"
print(re.compile(r"(?<!\()(?<!eq )'(?!\)|\Z)").sub(string=text, repl="''"))

输出

('hel''lo') eq 'some ''variable he''re'

推荐阅读