re.sub不替换所有出现的事件

Sni*_*ips 10 python regex

我不是Python开发人员,但我使用Python脚本将SQLite转换为MySQL

他们说,建议的脚本接近,但没有雪茄.

给我一个问题的线是:

line = re.sub(r"([^'])'t'(.)", r"\1THIS_IS_TRUE\2", line)
Run Code Online (Sandbox Code Playgroud)

......当然,还有等效的假('f')行.

我看到的问题是,只替换任何给定行中第一次出现的't'.

所以,输入到脚本,

INSERT INTO "cars" VALUES(56,'Bugatti Veyron','BUG 1',32,'t','t','2011-12-14 18:39:16.556916','2011-12-15 11:25:03.675058','81');
Run Code Online (Sandbox Code Playgroud)

...给...

INSERT INTO "cars" VALUES(56,'Bugatti Veyron','BUG 1',32,THIS_IS_TRUE,'t','2011-12-14 18:39:16.556916','2011-12-15 11:25:03.675058','81');
Run Code Online (Sandbox Code Playgroud)

我提到我不是Python开发人员,但我自己试图解决这个问题.根据文档,我知道re.sub应该替换所有出现的't'.

我很感激为什么我只看到第一次更换,谢谢.

Zer*_*eus 10

您在示例中需要的两个替换重叠 - 在第一种情况下,您的两个实例之间的逗号't'将匹配(.),因此([^'])在第二种情况下永远不会有机会匹配它.这个略微修改的版本可能有所帮

line = re.sub(r"(?<!')'t'(?=.)", r"THIS_IS_TRUE", line)
Run Code Online (Sandbox Code Playgroud)

此版本使用先行和回顾后的语法,描述在这里.