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