gpt4 book ai didi

SQLite 用弯引号替换直引号

转载 作者:行者123 更新时间:2023-12-02 09:03:43 24 4
gpt4 key购买 nike

我运行一个 Ghost 博客,我想查找所有单引号和双引号并将其替换为“大引号”(请参阅​​ here ),但我不太了解 SQLite。到目前为止,我已经想出了这个:

update posts set markdown = replace(markdown, '""', '“');

上面的命令将我的所有双引号替换为左大引号 (ALT+0147)。然后我尝试运行相同的命令,但替换结束引号 (ALT+0148),如下所示:

update posts set markdown = replace(markdown, '“', '”');

这基本上用结束引号替换了所有开始的大引号。这就是我陷入困境的地方。我不知道如何在 sqlite 中异常(exception),以便它只替换后面有文本的引号。此外,我还没有考虑过我希望直引号保持不变的情况,例如在 HTML 链接中,正如评论中指出的那样。

更新:有效

感谢您的回答,我找到了一个解决方案,就我而言,该解决方案非常有效!请注意,我使用了DB Browser for SQLite来更改我的数据库 -

update posts set markdown = replace(markdown, ' "', ' “');
update posts set markdown = replace(markdown, '." ', '.” ');
update posts set markdown = replace(markdown, '" ', '” ');

以上两个命令已将所有左双引号替换为大引号,右引号也是如此。现在剩下要做的就是,如下面的答案所述,涵盖此类引用可能出现的所有可能性。单引号也是如此,如下所示:

update posts set markdown = replace(markdown, ' ''', ' ‘');
update posts set markdown = replace(markdown, '.'' ', '.’ ');
update posts set markdown = replace(markdown, ''' ', '’ ');

对于所有中间的撇号:

update posts set markdown = replace(markdown, '''', '’');

最佳答案

SQLite(我知道的基本版本)在文本操作方面不是很强大。即使使用 sed、awk 或 perl 之类的东西,也可能不容易找到一个替代品来做 OP 想要的事情。

我将提供一些纯 SQLite 配方,需要对其进行扩展和组合以涵盖所有所需的情况(而不是不需要的情况)。诚然,查找并涵盖所有案例有点乏味。但这是我能想到的 SQLite 中最好的。我很高兴支持任何更简单、更有力的答案。您需要将您喜欢的食谱应用到您的数据库中。
也应该很容易将它们扩展到涵盖我没有想到的情况。

我建议首先仅使用简单的配方来尝试它们的效果,这只会以更改后的形式显示“markdown”列。只有当您喜欢它对所有条目的影响时,您才应该使用“更新/设置”来应用它。 (我相信你能够做到这一点,你对自己尝试的引用看起来不错。)

只是为了解释一下;应用方法 1 和 2 将涵盖我在示例输入中发现的一个示例,即“What.A.FILM.”。在聊天中,您(相当恭维地,谢谢)表示其他食谱正在“读懂您的想法”。发现该模式并将其扩展到任何其他示例应该不难。
我在 SQLite 中没有看到解决方案的一件事是“我重复“什么电影”blabla。”问题是引号和引用文本之间的空格。在 sed/perl/awk 解决方案中,可以检查“第一个/奇数直引号”和“第二个/偶数直引号”,但 SQLite 不能轻易做到这一点,也许根本不能,欢迎提出想法。

1 将“空格后跟直双引号”替换为“空格后跟左弯引号”:
从帖子中选择替换(markdown, ' "', ' "');

2 将“直双引号后跟空格”替换为“右弯引号后跟空格”:
从帖子中选择替换(markdown, '"', '"');

3 将“直双引号后跟逗号”替换为“右弯引号后跟逗号”:
从帖子中选择替换(markdown, '",', '”,');

4 将“直双引号后跟分号”替换为“右弯引号后跟分号”:
从帖子中选择替换(markdown, '";', '";');

5 将“直双引号后跟句号”替换为“结束花括号后跟句号”:
从帖子中选择替换(markdown, '".', '".');

对打开和关闭单引号执行相同的操作。当您开始发明自己的替代品时,请确保不要覆盖 http 链接,也不要覆盖 '',这两者显然都不是您预期的替换目标。

请注意,我明确承认这些替换在我自己的计算机上失败了。但在一次聊天中,OP 尝试了最简单的版本,并确认对他来说他们成功。主要区别似乎在于他使用数据库浏览器。
我认为这些东西因此“测试成功”,只是不在我的机器上。

关于SQLite 用弯引号替换直引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44317582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com