我需要使用以下设置在所有卡片中执行查找和替换:
作为一个例子,我想找到:
<span style="color: rgb(255, 255, 255)">Word</span>
并将其更改为
Word
换句话说,我想去掉周围的文字Word
。
但问题是我还有其他词,例如:
<span style="color: rgb(255, 255, 255)">One</span>
<span style="color: rgb(255, 255, 255)">Two</span>
<span style="color: rgb(255, 255, 255)">Three</span>
到
One
Two
Three
我想将它们全部更改为这些标签之间的单词。我如何使用 Anki 的搜索和替换通过提供正则表达式来实现该结果?实现该结果的正确正则表达式是什么?
答案1
答案似乎很容易给出,但当在“查找和替换”中应用有效的正则表达式时,它根本不起作用。
文档https://apps.ankiweb.net/docs/manual.html#find-and-replace根本没有帮助,甚至具有误导性,因为它展示了一个应用后不起作用的示例。
我只能假设它在某些以前的版本中是有效的,但无意中被破坏了。
让我们看看“查找和替换”窗口的几次试验。我使用以下设置。
观察 1
输入:<
查找:<
替换为:
输出:<
摘要:什么都没发生。模式有效,但未按预期工作。
观察 2
输入:<
查找:^。
替换为:
输出:lt;
摘要:lt;提醒 html 实体<
现在我们知道正则表达式引擎正在运行,但显然字符的存储方式与它们看起来不同。Anki
将集合存储在 collection.anki2 文件中,这是一个 sqlite 数据库文件。让我们在 SQLite 的 DB 浏览器中打开它并使用以下命令查找记录:
<span style="color: rgb(255, 255, 255)">One</span>
<span style="color: rgb(255, 255, 255)">Two</span>
<span style="color: rgb(255, 255, 255)">Three</span>
列 sfld:
<span style="color: rgb(255, 255, 255)">One<span><span style="color: rgb(255, 255, 255)">Two<span><span style="color: rgb(255, 255, 255)">Three<span>
列 flds:
<div><span style="color: rgb(255, 255, 255)">One<span></div><div><span style="color: rgb(255, 255, 255)">Two<span></div><div><span style="color: rgb(255, 255, 255)">Three<span></div><div><span style="color: rgb(255, 255, 255)">One<span></div><div><span style="color: rgb(255, 255, 255)">Two<span></div><div><span style="color: rgb(255, 255, 255)">Three<span></div>
显然正则表达式适用于 flds 列。
让我们尝试这个正则表达式:
变更前:
更改后:
该模式本身可以缩短,但在这里我主要关注如何使其发挥作用。
答案2
我以为我会插话说@wlod的回答是正确的。
您可以通过用括号括起您想要在替换过程中保留的任何匹配的正则表达式模式来创建捕获组,并使用按您指定的捕获组\<digit>
数量排序的约定。(
)
在我了解这一点之前,这也让我很困惑,因为在许多正则表达式实现中,用于$
表示捕获组,但在 Anki 中,\
使用。
示例 #1
您的 Anki 笔记中某个字段中有各种动物句子。您想保留该动物并规范化所有动物的句子。
# Card 1
Your dog is friendly.
# Card 2
That cat is evil.
# Card 3
My fish is dead.
寻找:
.*(dog|cat|fish).*
代替:
I love my \1.
结果:
# Card 1
I love my dog.
# Card 2
I love my cat.
# Card 3
I love my fish.
示例 #2
现在假设你还想保留它们的描述性形容词。你将需要两个捕获组。一个用于动物,一个用于形容词。
你可以做到这一点。
# Card 1
Your dog is friendly.
# Card 2
That cat is evil.
# Card 3
My fish is dead.
寻找:
.*(dog|cat|fish) is (.+)\.
代替:
The \2 \1
结果:
# Card 1
The friendly dog
# Card 2
The evil cat
# Card 3
The dead fish
我希望这有助于澄清一些事情。