SQLite用卷曲引号替换直引号

时间:2017-06-01 21:46:49

标签: sqlite typography ghost-blog

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

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

上面的命令将我的所有双引号替换为打开引号(ALT + 0147)。然后我尝试运行相同的命令,但代替收盘价(ALT + 0148),如下:

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

这基本上用关闭引号替换所有开头的引号。这就是我被困的地方。我不确定如何在sqlite中创建一个异常,因此它只替换后面有文本的引号。另外,我没有考虑过案例,我希望我的直引号保持不变,例如在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, '''', '’');

1 个答案:

答案 0 :(得分:1)

SQLite(在我所知的基础版本中)在文本操作方面不是很强大。即使使用像sed,awk或perl这样的东西,也可能不容易获得OP想要的单一替代品。

我将提供一些纯SQLite配方,需要扩展和组合以涵盖所有需要的情况(而不是不需要的情况)。 发现并覆盖所有案例无疑是有点乏味的。但这是我在SQLite中能想到的最好的。我很高兴能够提出任何更简单,更有力的答案。 您需要将您喜欢的食谱应用到数据库中 它也应该很容易扩展到我没想过的案例。

我建议首先只使用裸配方尝试每种效果,只显示更改形式的“降价”列。只有当您喜欢它对所有条目的影响时,您才应该使用“更新/设置”的东西来应用它。 (我依靠你能够做到这一点,你对自己的尝试的报价看起来不错。)

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

1将“空格后直线双引号”改为“空格后开卷”:
    select replace(markdown, ' "', ' “') from posts;

2将“直接双引号后跟空格”替换为“关闭后跟空格”:
    select replace(markdown, '" ', '” ') from posts;

3将“直接双引号后跟逗号”替换为“关闭后跟逗号”:
    select replace(markdown, '",', '”,') from posts;

4将“直接双引号后面加分号”改为“关闭卷曲后加分号”:
    select replace(markdown, '";', '”;') from posts;

5将“直接双引号,然后是fullstop”替换为“关闭卷曲,然后是fullstop”:
    select replace(markdown, '".', '”.') from posts;

为打开和关闭单引号做同样的事情。 当您开始发明自己的替代品时,请确保不要覆盖http链接而不是覆盖'',这两者似乎都不是您想要的替代目标。

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