我不是Python开发人员,但我使用Python脚本来convert SQLite to MySQL
建议的剧本很接近,但没有雪茄,正如他们所说。
给我一个问题的是:
line = re.sub(r"([^'])'t'(.)", r"\1THIS_IS_TRUE\2", line)
…当然,还有false('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');
…给。。。
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');
我提到我不是一个Python开发人员,但我已经尝试自己解决这个问题。根据文档,我理解re.sub应该替换所有出现的“t”。
如果你能告诉我为什么我只看到第一次出现的东西被替换掉,我会很感激的,谢谢。
在您的示例中需要的两个替换重叠-在第一种情况下,
't'
的两个实例之间的逗号将由(.)
匹配,因此在第二种情况下,([^'])
永远没有机会匹配它。这个稍加修改的版本可能有助于:此版本使用lookahead和lookbehind语法,如here所述。
怎么样
不使用
re
。这将替换所有出现的't'
和'f'
。只要确保没有一辆车被命名为t
。您看到的第一个匹配项是
,'t',
。Python从下一个字符开始,即'
(在第二个t
之前),然后,它无法匹配([^'])
部分并跳过第二个't'
。换句话说,要替换的后续匹配项不能重叠。
相关问题 更多 >
编程相关推荐