Мне нужно найти и заменить все карточки, используя следующие настройки:

В качестве примера я хочу найти:

<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 ответа2

1

Ответ кажется легким, но когда в 'Найти и заменить' применяется действительное регулярное выражение, оно просто не работает.
Документация https://apps.ankiweb.net/docs/manual.html#find-and-replace вообще не полезна и даже вводит в заблуждение, поскольку показывает пример, который не работает при применении.
Я могу только предположить, что это работало в некоторых из предыдущих версий, но было непреднамеренно сломано.

Давайте посмотрим на пару испытаний с окном «Найти и заменить». Я использую следующие настройки.
Наблюдение 1
Вход: <
Найти: <
Заменить:
Выход: <

Резюме: ничего не произошло Шаблон действителен, но он не сработал, как ожидалось.

Наблюдение 2
Вход: <
Найти: ^.
Заменить:
Выход: л;

Резюме: lt; напоминает HTML-сущность &lt; Теперь мы знаем, что движок регулярных выражений работает, но, очевидно, символы хранятся не так, как выглядят.

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>&lt;span style="color: rgb(255, 255, 255)"&gt;One&lt;span&gt;</div><div>&lt;span style="color: rgb(255, 255, 255)"&gt;Two&lt;span&gt;</div><div>&lt;span style="color: rgb(255, 255, 255)"&gt;Three&lt;span&gt;</div><div>&lt;span style="color: rgb(255, 255, 255)"&gt;One&lt;span&gt;</div><div>&lt;span style="color: rgb(255, 255, 255)"&gt;Two&lt;span&gt;</div><div>&lt;span style="color: rgb(255, 255, 255)"&gt;Three&lt;span&gt;</div>

Очевидно, регулярное выражение работает в столбце flds.

Давайте попробуем это регулярное выражение:


До изменения:


После изменения:


Сам шаблон может быть сокращен, но здесь я в основном сосредоточился на том, как заставить его работать вообще.

0

Я думал, что просто позвоню, чтобы сказать, что ответ @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

Я надеюсь, что это помогает прояснить ситуацию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .