我不是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)
此版本使用先行和回顾后的语法,描述在这里.