Как сделать регулярное выражение найти замену в анки?
Мне нужно найти и заменить все карточки, используя следующие настройки:
В качестве примера я хочу найти:
<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 для достижения этого результата с помощью регулярного выражения? Какое правильное регулярное выражение для достижения этого результата?
2 ответа
Кажется, что ответ прост, но когда в 'Найти и заменить' применяется действительное регулярное выражение, оно просто не работает.
Документация https://apps.ankiweb.net/docs/manual.html вообще не полезна и даже вводит в заблуждение, поскольку показывает пример, который не работает при применении.
Я могу только предположить, что это работало в некоторых из предыдущих версий, но было непреднамеренно сломано.
Давайте посмотрим на пару испытаний с окном "Найти и заменить". Я использую следующие настройки.
Наблюдение 1
Вход: <
Найти: <
Заменить:
Выход: <
Резюме: ничего не произошло Шаблон действителен, но он не сработал, как ожидалось.
Наблюдение 2
Вход: <
Найти: ^.
Заменить:
Выход: л;
Резюме: lt; напоминает HTML сущность <
Теперь мы знаем, что движок регулярных выражений работает, но, очевидно, символы хранятся не так, как выглядят.
Anki хранит коллекции в файле collection.anki2, который является файлом базы данных sqlite. Давайте откроем его в браузере БД для SQLite и найдем запись с: <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>
Поля столбца: <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.
Давайте попробуем это регулярное выражение:
До изменения:
После изменения:
Сам шаблон может быть сокращен, но здесь я сосредоточился в основном на том, как заставить его работать вообще.
Я думал, что просто wlod, чтобы сказать, что wlod правильный.
Вы можете создать группу захвата, окружив любой соответствующий шаблон регулярных выражений, который вы хотели бы сохранить во время замены, заключив его в скобки и используя соглашение \<digit>
упорядочено по количеству (
захваченный )
группы вы указали.
Это убило меня тоже, прежде чем я узнал об этом, потому что во многих реализациях регулярных выражений, $
используется для обозначения группы захвата, но в Анки \
используется.
Пример № 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
Я надеюсь, что это помогает прояснить ситуацию.