Вопрос или проблема
Я пытаюсь создать словарь из нескольких веб-страниц, которые я нашел в интернете. Словарь индексирует заглавные слова, чтобы их можно было легко найти в режиме поиска. Информация на веб-странице разделена на секции, каждая из которых имеет уникальный идентификатор. Например:
<div id="word-2857">Andronicus, Titus . . .
Проблема в том, что в другом тексте есть ссылки на другие слова, написанные как: <a href="#word-2857"><i>см. Titus Andronicus</i></a>
Поэтому при создании словаря (для Goldendict) ссылки на другие слова должны быть записаны как: <a href="https://superuser.com/questions/797573/entry://headword">текст для отображения</a>
Поскольку создание заглавных слов в формате word-2857 вместо Andronicus, Titus довольно бесполезно, что я хочу сделать (в конце концов) — это выполнить пакетную замену ссылок для всех слов (их около 10 000). Я имею в виду, что хочу заменить все идентификаторы ссылок на соответствующие заглавные слова. <a href="#word-2857"><i>см. Titus Andronicus</i></a>
должно стать <a href="https://superuser.com/questions/797573/entry://Andronicus, Titus">см. Titus Andronicus</a>
У меня уже есть список всех слов, которые я хочу заменить, и на что я хочу их заменить. Проблема в том, что используя Notepad++, я могу выполнить только одну уникальную замену за раз. Слов больше 10 000, и это займет слишком много времени. Пожалуйста, помогите объяснить, как это можно сделать легко.
Спасибо
Итак, вот мое решение. Скопируйте все ваши данные из Notepad++ в новую книгу Excel. Это должно быть на Листе1. Скопируйте все ваши элементы “Поиск” в столбец A Листа2. Разместите соответствующие элементы “Замена” в столбце B Листа2. Заголовков на Листе2 быть не должно, так как он будет также искать и заменять значения заголовков (если только вы не измените диапазон “r” в следующем коде, чтобы начать с A2).
Запустите следующий скрипт:
Sub FindReplaceAll()
Dim FindString, ReplaceString As String
Dim r As Range
Set r = Sheet2.Range("A1")
Do While Not r.Value = 0
FindString = r.Value
ReplaceString = r.Offset(0, 1).Value
Sheet1.Cells.Replace What:=FindString, Replacement:=ReplaceString, LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Set r = r.Offset(1, 0)
Loop
MsgBox "Готово!"
End Sub
Это должно искать и заменять все ваши записи по одной. Как только это будет сделано, вы можете скопировать его обратно в Notepad++. Он остановится на первой пустой строке, так что убедитесь, что строки для поиска/замены непрерывны.
На всякий случай, если вы не очень привыкли к макросам/скриптам Excel, в Excel нажмите alt + F11, щелкните правой кнопкой мыши на VBAProject в дереве слева и выберите Вставка > Модуль. Вставьте код в новое окно, которое появится, и нажмите кнопку воспроизведения (F5).
Надеюсь, это поможет, удачи!
Я нашел более лучший подход, используя плагин Python Script.
Сначала загрузите и установите Python Script с:
https://npppythonscript.sourceforge.net
Затем откройте notepad++, и напишите ваши замены так:
editor.rereplace(r'jndi-name="[^"]*"', 'jndi-name="******"')
editor.rereplace(r'pool-name="[^"]*"', "pool-name=\"******\"")
editor.rereplace(r'<connection-url>.*?</connection-url>', "<connection-url>******</connection-url>")
editor.rereplace(r'<connection-property name="url">(\s*).*?(\s*)</connection-property>', '<connection-property name="url">$1******$2</connection-property>', re.DOTALL)
editor.rereplace(r'<user-name>.*?</user-name>', '<user-name>******</user-name>')
editor.rereplace(r'<password>.*?</password>', '<password>******</password>')
Сохраните ваш файл как ${notepad++ path}\plugins\PythonScript\scripts\myOwn\replacementsbatch.py
Перейдите в меню Python Script и найдите ваш скрипт (replacementsbatch.py):
Python Script > Scripts > myOwn > replacementsbatch
И вот вы здесь!
Ответ или решение
Чтобы осуществить пакетную замену текста в Notepad++ для вашего сценария, существует несколько подходов, которые значительно упростят задачу.
Способ 1: Использование Excel для поиска и замены
-
Подготовьте ваши данные:
- Скопируйте весь текст из Notepad++ в новую книгу Excel на первом листе (Sheet1).
- На втором листе (Sheet2) в столбец A вставьте все строки, которые вы хотите найти. В столбец B вставьте соответствующие строки, на которые нужно заменить.
-
Запустите макрос:
- Нажмите
Alt + F11
, чтобы открыть редактор VBA. - Щелкните правой кнопкой мыши на
VBAProject
в панели слева и выберитеInsert > Module
, чтобы вставить новый модуль. - Вставьте следующий код:
- Нажмите
Sub FindReplaceAll()
Dim FindString, ReplaceString As String
Dim r As Range
Set r = Sheet2.Range("A1")
Do While Not r.Value = 0
FindString = r.Value
ReplaceString = r.Offset(0, 1).Value
Sheet1.Cells.Replace What:=FindString, Replacement:=ReplaceString, LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Set r = r.Offset(1, 0)
Loop
MsgBox "Готово!"
End Sub
- Запустите код, нажав
F5
. Макрос выполнит поиск и замену для всех записей на Sheet2 в вашем тексте на Sheet1.
- Скопируйте результат обратно:
- После завершения макроса вы можете скопировать результаты обратно в Notepad++.
Способ 2: Использование Python Script в Notepad++
-
Установите плагин Python Script:
- Скачайте и установите плагин Python Script из официального репозитория.
-
Напишите скрипт для замены:
- Откройте Notepad++ и создайте новый файл в формате Python (например,
replacementsbatch.py
). - Вставьте следующий код для выполнения замен:
- Откройте Notepad++ и создайте новый файл в формате Python (например,
# Создайте словарь замен
replacements = {
'#word-2857': 'https://superuser.com/questions/797573/entry://Andronicus, Titus',
# Добавьте все остальные замены здесь
}
for find, replace in replacements.items():
editor.rereplace(find, replace)
-
Сохраните скрипт:
- Сохраните файл в папке
${notepad++ path}\plugins\PythonScript\scripts\myOwn\replacementsbatch.py
.
- Сохраните файл в папке
-
Запустите скрипт:
- Перейдите в меню Python Script и выберите ваш скрипт для выполнения замен.
Итоги
Теперь вы обладаете двумя способами для пакетной замены текста в ваших файлах. Первый метод с Excel является более простым и визуальным, в то время как второй метод с Python Script более гибкий и может быть адаптирован под различные нужды. Выбор метода зависит от ваших предпочтений и удобства работы. Удачи в вашем проекте!