python - re.sub 不替换所有事件

标签 python regex

我不是 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' 的两个实例之间的逗号将在第一种情况下与 (.) 匹配,所以 ([^']) 在第二种情况下永远没有机会匹配它。这个稍作修改的版本可能会有所帮助:

line = re.sub(r"(?<!')'t'(?=.)", r"THIS_IS_TRUE", line)

此版本使用先行和后行语法,描述 here .

关于python - re.sub 不替换所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13363473/

相关文章:

ios - 从第一个空格拆分 NSString

python - 为什么比较空值不起作用?

python - PyECC 示例 - Python 椭圆曲线密码学

python - 重新格式化 JSON 文件?

Javascript RegEx 用于注释/取消注释文件源中的 PHP 标签

sql - regexp_matches() 返回 $ 的两个匹配项(字符串结尾)

除多字符标记之外的任何内容的正则表达式

python - 生成 python 函数来包装 REST API

python - 如何在 PyCharm 中使用 python 的 markdown?

.net - 使用正则表达式将字符串映射到功能