Массовая замена кода комментирования с помощью notepad++

Массовая замена кода комментирования с помощью notepad++

Блокнот++

Я ищу способ массового комментирования (и код для его отмены) блока текста. Игнорируя другие части того же файла; но в то же время уважая некоторые различия в каждом блоке.

пример блока уже закомментирован,

Code to keep Above

#1291.5.21 = { #some more text to preserve
#   owner = XXX
#   controller = XXX
#   add_core = XXX
#   remove_core = XXX
#} #some more text to preserve

More code to keep below

XXX будет разным в каждом блоке, хотя, возможно, и одинаковым в разных файлах (хотя всего три буквы/цифры); для большей сложности блоки, содержащие только XXX, в идеале будут игнорироваться (и оставаться закомментированными).

Единственным реальным указателем для ограничений блока является дата(ы) = { и закрывающая скобка }, которая будет одинаковой (до и в основном включая текст # для сохранения после)

Конечный результат Что я ищу.

Code to keep Above

1291.5.21 = { #some more text to preserve
    owner = XXX
    controller = XXX
    add_core = XXX
    remove_core = XXX
} #some more text to preserve

More code to keep below

бонусные баллы за возможность сделать это по 4 или по всем 8 датам одним щелчком мыши. (так как они образуют суперблоки)

1291.5.21
1291.5.23
1291.5.24
1291.5.26

1444.11.13
1444.11.15
1444.11.16
1444.11.18

решение1

Вот решение для раскомментирования строк, которые не имеют значения, равного XXX:

  • Ctrl+H
  • Найти то, что:^#(?=\d{4}\.\d\d?\.\d\d?|}|\h+(?:owner|controller|add_core|remove_core)\h*=\h*(?!XXX)\w{3}$)
  • Заменить:LEAVE EMPTY
  • ПРОВЕРЯТЬ Учитывать регистр
  • ПРОВЕРЯТЬ Обернуть вокруг
  • ПРОВЕРЯТЬ Регулярное выражение
  • СНЯТЬ ОТМЕТКУ . matches newline
  • Replace all

Объяснение:

^#                          # beginning of line and # sign
(?=                         # positive lookahead
    \d{4}\.\d\d?\.\d\d?         # date
  |                         # OR
    }                           # closing curly brace
  |                         # OR
    \h+                         # 1 or more horizontal spaces
    (?:                         # non capture group
        owner                       # literally
      |                         # OR
        controller                  # literally
      |                         # OR
        add_core                    # literally
      |                         # OR
        remove_core                 # literally
    )                           # end group
    \h*=\h*                     # equal sign wth optional spaces before and after
    (?!XXX)                     # negative lookahead, make sure we haven't XXX after
    \w{3}                       # 3 word characters
    $                           # end of line
)                           # end lookahead

Скриншот (до):

введите описание изображения здесь

Скриншот (после):

введите описание изображения здесь

Связанный контент