Замена текста пакетно

Вопрос или проблема

Я пытаюсь создать словарь из нескольких веб-страниц, которые я нашел в интернете. Словарь индексирует заглавные слова, чтобы их можно было легко найти в режиме поиска. Информация на веб-странице разделена на секции, каждая из которых имеет уникальный идентификатор. Например:
<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 для поиска и замены

  1. Подготовьте ваши данные:

    • Скопируйте весь текст из Notepad++ в новую книгу Excel на первом листе (Sheet1).
    • На втором листе (Sheet2) в столбец A вставьте все строки, которые вы хотите найти. В столбец B вставьте соответствующие строки, на которые нужно заменить.
  2. Запустите макрос:

    • Нажмите 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.
  1. Скопируйте результат обратно:
    • После завершения макроса вы можете скопировать результаты обратно в Notepad++.

Способ 2: Использование Python Script в Notepad++

  1. Установите плагин Python Script:

  2. Напишите скрипт для замены:

    • Откройте Notepad++ и создайте новый файл в формате Python (например, replacementsbatch.py).
    • Вставьте следующий код для выполнения замен:
# Создайте словарь замен
replacements = {
    '#word-2857': 'https://superuser.com/questions/797573/entry://Andronicus, Titus',
    # Добавьте все остальные замены здесь
}

for find, replace in replacements.items():
    editor.rereplace(find, replace)
  1. Сохраните скрипт:

    • Сохраните файл в папке ${notepad++ path}\plugins\PythonScript\scripts\myOwn\replacementsbatch.py.
  2. Запустите скрипт:

    • Перейдите в меню Python Script и выберите ваш скрипт для выполнения замен.

Итоги

Теперь вы обладаете двумя способами для пакетной замены текста в ваших файлах. Первый метод с Excel является более простым и визуальным, в то время как второй метод с Python Script более гибкий и может быть адаптирован под различные нужды. Выбор метода зависит от ваших предпочтений и удобства работы. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...