Найти/заменить символ в Notepad++ с помощью подстановочных знаков

Найти/заменить символ в Notepad++ с помощью подстановочных знаков

Я провел некоторые исследования по этой теме, но не смог найти точное решение для моей конкретной потребности. Я использую Notepad++ для написания некоторого ассемблерного кода Z80. Мне нужно заменить все экземпляры символа ":" на "::", но только в определенных случаях. Например, скажем, у меня есть код, который выглядит так:

SomeFunction:
  ld a, whatever
  ret

; Remember to do this: blah blah blah

Function2:
  jr z, someWhere

.subfunction:
  ld hl, somePointer
  ret

Обычно я мог бы просто нажать Ctrl+H, чтобы заменить все вхождения ":" на "::"... однако в этом конкретном случае я хочу избежать замены одного символа ":" в строках, которые начинаются с "." или ";". Все остальные вхождения ":" заменяю на "::". По сути, конечный результат будет выглядеть так:

SomeFunction::
  ld a, whatever
  ret

; Remember to do this: blah blah blah

Function2::
  jr z, someWhere

.subfunction:
  ld hl, somePointer
  ret

Я правильно выразился? Я знаю, что могу (и должен) использовать для этого регулярное выражение, и что будут задействованы подстановочные знаки, но я не уверен.какЯ бы занялся форматированием. Спасибо большое!

решение1

Вы можете попробовать следующее:

  • Найти то, что:^(?=[^\;|\.])(.+\:)$
  • Заменить на: ``
  • Режим поиска: Регулярное выражение

До

После

решение2

Это также проверяет, что двоеточия еще не удвоены.

  • Ctrl+H
  • Найти то, что:^(?![;.]).*?(?<!:):\K(?!:)
  • Заменить::
  • ПРОВЕРЯТЬ Обернуть вокруг
  • ПРОВЕРЯТЬ Регулярное выражение
  • СНЯТЬ ОТМЕТКУ . matches newline
  • Replace all

Объяснение:

^           # beginning of line
    (?![;.])    # negative lookahead, make sure the next character is not ; or .
    .*?         # 0 or more any character but newline, not greedy
    (?<!:)      # negative lookbehind, make sure the previous character is not :
    :           # a colon
    \K          # forget all we have seen until this position
    (?!:)       # negative lookahead, make sure the next character is not :

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

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

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

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

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